자습서
# 스프레드시트 API - Documents for Excel 시작하기
이 자습서는 Document Solutions for Excel의 기능에 대한 이해를 돕기위해 따라하실수 있는 실제적인 시나리오를 만들었습니다. 자습서를 마치시면 기초적인 예산용 Excel 파일이 완성됩니다.
## 준비
1. [.NET Core](https://dotnet.microsoft.com/ko-kr/download)를 설치합니다. 이 자습서에서는 .NET Core를 사용하지만, .NET Framework 및 Mono 프로젝트에서도 유사한 메서드를 사용할 수도 있습니다.
2. **Visual Studio**에서 .NET Core 콘솔 응용 프로그램을 만들거나 *
> ```csharp
> dotnet new console
> ```
3. Visual Studio 또는 dotnet CLI를 사용하여 **Document Solutions for Excel** nuget 패키지를 설치합니다.
> **Visual Studio**
> - 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하고 "NuGet 패키지 관리"를 클릭합니다.
> - 패키지 소스로 **nuget.org**를 선택하고 "DS.Documents.Excel"을 검색한 후 "설치"를 클릭합니다.
>
> **dotnet CLI**
> - 프로젝트 폴더 아래에서 cmd 창을 엽니다.
> - 다음 명령을 실행합니다.
> ```csharp
> dotnet add package DS.Documents.Excel
> ```
## 네임스페이스 추가
Program.cs를 열고 아래의 네임스페이스 3개를 추가합니다.
- C#
```csharp
using System.Drawing;
using GrapeCity.Documents.Excel;
using GrapeCity.Documents.Excel.Drawing;
```
- VB
```vbnet
Imports System.Drawing
Imports GrapeCity.Documents.Excel
Imports GrapeCity.Documents.Excel.Drawing
```
## 통합 문서 만들기
Document Solutions for Excel API를 사용하여 Excel 파일을 만드는 첫 번째 단계는 새 통합 문서를 만드는 것입니다.
- C#
```csharp
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.Worksheets[0];
```
- VB
```vbnet
Dim workbook As New Workbook
Dim worksheet As IWorksheet = workbook.Worksheets(0)
```
## 데이터 초기화
**Document Solutions for Excel**에서 데이터를 초기화하려면 2차원 배열을 준비하고 이를 워크시트 범위의 값에 할당합니다.
- C#
```csharp
worksheet.Range["B3:C7"].Value = new object[,]
{
{ "ITEM", "AMOUNT" },
{ "Income 1", 2500 },
{ "Income 2", 1000 },
{ "Income 3", 250 },
{ "Other", 250 },
};
worksheet.Range["B10:C23"].Value = new object[,]
{
{ "ITEM", "AMOUNT" },
{ "Rent/mortgage", 800 },
{ "Electric", 120 },
{ "Gas", 50 },
{ "Cell phone", 45 },
{ "Groceries", 500 },
{ "Car payment", 273 },
{ "Auto expenses", 120 },
{ "Student loans", 50 },
{ "Credit cards", 100 },
{ "Auto Insurance", 78 },
{ "Personal care", 50 },
{ "Entertainment", 100 },
{ "Miscellaneous", 50 },
};
worksheet.Range["B2:C2"].Merge();
worksheet.Range["B2"].Value = "MONTHLY INCOME";
worksheet.Range["B9:C9"].Merge();
worksheet.Range["B9"].Value = "MONTHLY EXPENSES";
worksheet.Range["E2:G2"].Merge();
worksheet.Range["E2"].Value = "PERCENTAGE OF INCOME SPENT";
worksheet.Range["E5:G5"].Merge();
worksheet.Range["E5"].Value = "SUMMARY";
worksheet.Range["E3:F3"].Merge();
worksheet.Range["E9"].Value = "BALANCE";
worksheet.Range["E6"].Value = "Total Monthly Income";
worksheet.Range["E7"].Value = "Total Monthly Expenses";
```
- VB
```vbnet
worksheet.Range("B3:C7").Value = {
{"ITEM", "AMOUNT"},
{"Income 1", 2500},
{"Income 2", 1000},
{"Income 3", 250},
{"Other", 250}
}
worksheet.Range("B10:C23").Value = {
{"ITEM", "AMOUNT"},
{"Rent/mortgage", 800},
{"Electric", 120},
{"Gas", 50},
{"Cell phone", 45},
{"Groceries", 500},
{"Car payment", 273},
{"Auto expenses", 120},
{"Student loans", 50},
{"Credit cards", 100},
{"Auto Insurance", 78},
{"Personal care", 50},
{"Entertainment", 100},
{"Miscellaneous", 50}
}
worksheet.Range("B2:C2").Merge()
worksheet.Range!B2.Value = "MONTHLY INCOME"
worksheet.Range("B9:C9").Merge()
worksheet.Range!B9.Value = "MONTHLY EXPENSES"
worksheet.Range("E2:G2").Merge()
worksheet.Range!E2.Value = "PERCENTAGE OF INCOME SPENT"
worksheet.Range("E5:G5").Merge()
worksheet.Range!E5.Value = "SUMMARY"
worksheet.Range("E3:F3").Merge()
worksheet.Range!E9.Value = "BALANCE"
worksheet.Range!E6.Value = "Total Monthly Income"
worksheet.Range!E7.Value = "Total Monthly Expenses"
```
## 행 높이 및 열 너비 설정
행 높이와 열 너비를 사용자 정의하고 레이아웃 및 데이터 프레젠테이션을 설정합니다. "StandardHeight" 및 "StandardWidth"를 사용하여 워크시트의 기본 행 높이와 열 너비를 설정할 수 있습니다.
- C#
```csharp
worksheet.StandardHeight = 26.25;
worksheet.StandardWidth = 8.43;
worksheet.Range["2:24"].RowHeight = 27;
worksheet.Range["A:A"].ColumnWidth = 2.855;
worksheet.Range["B:B"].ColumnWidth = 33.285;
worksheet.Range["C:C"].ColumnWidth = 25.57;
worksheet.Range["D:D"].ColumnWidth = 1;
worksheet.Range["E:F"].ColumnWidth = 25.57;
worksheet.Range["G:G"].ColumnWidth = 14.285;
```
- VB
```vbnet
worksheet.StandardHeight = 26.25
worksheet.StandardWidth = 8.43
worksheet.Range("2:24").RowHeight = 27
worksheet.Range("A:A").ColumnWidth = 2.855
worksheet.Range("B:B").ColumnWidth = 33.285
worksheet.Range("C:C").ColumnWidth = 25.57
worksheet.Range("D:D").ColumnWidth = 1
worksheet.Range("E:F").ColumnWidth = 25.57
worksheet.Range("G:G").ColumnWidth = 14.285
```
## 표 만들기
두 개의 표("수입" 및 "비용")를 추가하고 각 표에 기본 표 스타일을 적용합니다.
- C#
```csharp
ITable incomeTable = worksheet.Tables.Add(worksheet.Range["B3:C7"], true);
incomeTable.Name = "tblIncome";
incomeTable.TableStyle = workbook.TableStyles["TableStyleMedium4"];
ITable expensesTable = worksheet.Tables.Add(worksheet.Range["B10:C23"], true);
expensesTable.Name = "tblExpenses";
expensesTable.TableStyle = workbook.TableStyles["TableStyleMedium4"];
```
- VB
```vbnet
Dim incomeTable As ITable = worksheet.Tables.Add(worksheet.Range("B3:C7"), True)
incomeTable.Name = "tblIncome"
incomeTable.TableStyle = workbook.TableStyles("TableStyleMedium4")
Dim expensesTable As ITable = worksheet.Tables.Add(worksheet.Range("B10:C23"), True)
expensesTable.Name = "tblExpenses"
expensesTable.TableStyle = workbook.TableStyles("TableStyleMedium4")
```
## 함수 설정
사용자 정의 이름 2개를 만들어 월수입과 비용을 할당하고 월수입 합계, 월 비용 합계, 수입 대비 지출 백분율, 잔액을 계산하는 함수를 추가합니다.
- C#
```csharp
worksheet.Names.Add("TotalMonthlyIncome", "=SUM(tblIncome[AMOUNT])");
worksheet.Names.Add("TotalMonthlyExpenses", "=SUM(tblExpenses[AMOUNT])");
worksheet.Range["E3"].Formula = "=TotalMonthlyExpenses";
worksheet.Range["G3"].Formula = "=TotalMonthlyExpenses/TotalMonthlyIncome";
worksheet.Range["G6"].Formula = "=TotalMonthlyIncome";
worksheet.Range["G7"].Formula = "=TotalMonthlyExpenses";
worksheet.Range["G9"].Formula = "=TotalMonthlyIncome-TotalMonthlyExpenses";
```
- VB
```vbnet
worksheet.Names.Add("TotalMonthlyIncome", "=SUM(tblIncome[AMOUNT])")
worksheet.Names.Add("TotalMonthlyExpenses", "=SUM(tblExpenses[AMOUNT])")
worksheet.Range!E3.Formula = "=TotalMonthlyExpenses"
worksheet.Range!G3.Formula = "=TotalMonthlyExpenses/TotalMonthlyIncome"
worksheet.Range!G6.Formula = "=TotalMonthlyIncome"
worksheet.Range!G7.Formula = "=TotalMonthlyExpenses"
worksheet.Range!G9.Formula = "=TotalMonthlyIncome-TotalMonthlyExpenses"
```
## 스타일 설정
범위의 스타일을 변경하는 방법은 두 가지입니다.
- 기본 제공 스타일 또는 사용자 정의 스타일을 이름으로 적용
- 각 요소에 개별 스타일 설정
"통화", "제목 1", "백분율" 기본 제공 스타일을 정의하여 셀 범위에 적용합니다. 다른 범위에 적용할 개별 스타일 요소도 정의합니다.
- C#
```csharp
IStyle currencyStyle = workbook.Styles["Currency"];
currencyStyle.IncludeAlignment = true;
currencyStyle.VerticalAlignment = VerticalAlignment.Bottom;
currencyStyle.NumberFormat = "$#,##0.00";
IStyle heading1Style = workbook.Styles["Heading 1"];
heading1Style.IncludeAlignment = true;
heading1Style.HorizontalAlignment = HorizontalAlignment.Center;
heading1Style.VerticalAlignment = VerticalAlignment.Center;
heading1Style.Font.Name = "Century Gothic";
heading1Style.Font.Bold = true;
heading1Style.Font.Size = 11;
heading1Style.Font.Color = Color.White;
heading1Style.IncludeBorder = false;
heading1Style.IncludePatterns = true;
heading1Style.Interior.Color = Color.FromArgb(32, 61, 64);
IStyle percentStyle = workbook.Styles["Percent"];
percentStyle.IncludeAlignment = true;
percentStyle.HorizontalAlignment = HorizontalAlignment.Right;
percentStyle.IncludeFont = true;
percentStyle.Font.Color = Color.FromArgb(32, 61, 64);
percentStyle.Font.Name = "Century Gothic";
percentStyle.Font.Bold = true;
percentStyle.Font.Size = 14;
worksheet.SheetView.DisplayGridlines = false;
worksheet.Range["C4:C7, C11:C23, G6:G7, G9"].Style = currencyStyle;
worksheet.Range["B2, B9, E2, E5"].Style = heading1Style;
worksheet.Range["G3"].Style = percentStyle;
worksheet.Range["E6:G6"].Borders[BordersIndex.EdgeBottom].LineStyle = BorderLineStyle.Medium;
worksheet.Range["E6:G6"].Borders[BordersIndex.EdgeBottom].Color = Color.FromArgb(32, 61, 64);
worksheet.Range["E7:G7"].Borders[BordersIndex.EdgeBottom].LineStyle = BorderLineStyle.Medium;
worksheet.Range["E7:G7"].Borders[BordersIndex.EdgeBottom].Color = Color.FromArgb(32, 61, 64);
worksheet.Range["E9:G9"].Interior.Color = Color.FromArgb(32, 61, 64);
worksheet.Range["E9:F9"].HorizontalAlignment = HorizontalAlignment.Left;
worksheet.Range["E9:G9"].VerticalAlignment = VerticalAlignment.Center;
worksheet.Range["E9:G9"].Font.Name = "Century Gothic";
worksheet.Range["E9:G9"].Font.Bold = true;
worksheet.Range["E9:G9"].Font.Size = 11;
worksheet.Range["E9:G9"].Font.Color = Color.White;
worksheet.Range["E3:F3"].Borders.Color = Color.FromArgb(32, 61, 64);
```
- VB
```vbnet
Dim currencyStyle As IStyle = workbook.Styles("Currency")
currencyStyle.IncludeAlignment = True
currencyStyle.VerticalAlignment = VerticalAlignment.Bottom
currencyStyle.NumberFormat = "$#,##0.00"
Dim heading1Style As IStyle = workbook.Styles("Heading 1")
heading1Style.IncludeAlignment = True
heading1Style.HorizontalAlignment = HorizontalAlignment.Center
heading1Style.VerticalAlignment = VerticalAlignment.Center
heading1Style.Font.Name = "Century Gothic"
heading1Style.Font.Bold = True
heading1Style.Font.Size = 11
heading1Style.Font.Color = Color.White
heading1Style.IncludeBorder = False
heading1Style.IncludePatterns = True
heading1Style.Interior.Color = Color.FromArgb(32, 61, 64)
Dim percentStyle As IStyle = workbook.Styles("Percent")
percentStyle.IncludeAlignment = True
percentStyle.HorizontalAlignment = HorizontalAlignment.Right
percentStyle.IncludeFont = True
percentStyle.Font.Color = Color.FromArgb(32, 61, 64)
percentStyle.Font.Name = "Century Gothic"
percentStyle.Font.Bold = True
percentStyle.Font.Size = 14
worksheet.SheetView.DisplayGridlines = False
worksheet.Range("C4:C7, C11:C23, G6:G7, G9").Style = currencyStyle
worksheet.Range("B2, B9, E2, E5").Style = heading1Style
worksheet.Range!G3.Style = percentStyle
worksheet.Range("E6:G6").Borders(BordersIndex.EdgeBottom).LineStyle = BorderLineStyle.Medium
worksheet.Range("E6:G6").Borders(BordersIndex.EdgeBottom).Color = Color.FromArgb(32, 61, 64)
worksheet.Range("E7:G7").Borders(BordersIndex.EdgeBottom).LineStyle = BorderLineStyle.Medium
worksheet.Range("E7:G7").Borders(BordersIndex.EdgeBottom).Color = Color.FromArgb(32, 61, 64)
worksheet.Range("E9:G9").Interior.Color = Color.FromArgb(32, 61, 64)
worksheet.Range("E9:F9").HorizontalAlignment = HorizontalAlignment.Left
worksheet.Range("E9:G9").VerticalAlignment = VerticalAlignment.Center
worksheet.Range("E9:G9").Font.Name = "Century Gothic"
worksheet.Range("E9:G9").Font.Bold = True
worksheet.Range("E9:G9").Font.Size = 11
worksheet.Range("E9:G9").Font.Color = Color.White
worksheet.Range("E3:F3").Borders.Color = Color.FromArgb(32, 61, 64)
```
## 조건부 서식 추가
Document Solutions for Excel은 모든 유형의 조건부 서식을 지원합니다. 그라데이션 데이터 막대 서식으로 수입 대비 지출 백분율을 표시할 수 있습니다. 이 규칙은 값을 표시하지 않고 데이터 막대만을 표시합니다.
- C#
```csharp
IDataBar dataBar = worksheet.Range["E3"].FormatConditions.AddDatabar();
dataBar.MinPoint.Type = ConditionValueTypes.Number;
dataBar.MinPoint.Value = 1;
dataBar.MaxPoint.Type = ConditionValueTypes.Number;
dataBar.MaxPoint.Value = "=TotalMonthlyIncome";
dataBar.BarFillType = DataBarFillType.Gradient;
dataBar.BarColor.Color = Color.Red;
dataBar.ShowValue = false;
```
- VB
```vbnet
Dim dataBar As IDataBar = worksheet.Range!E3.FormatConditions.AddDatabar()
dataBar.MinPoint.Type = ConditionValueTypes.Number
dataBar.MinPoint.Value = 1
dataBar.MaxPoint.Type = ConditionValueTypes.Number
dataBar.MaxPoint.Value = "=TotalMonthlyIncome"
dataBar.BarFillType = DataBarFillType.Gradient
dataBar.BarColor.Color = Color.Red
dataBar.ShowValue = False
```
## 차트 추가
세로 막대형 차트를 만들어 수입과 비용의 차이를 비교합니다. 계열 겹침과 간격 너비를 변경하고 차트 영역, 축 선, 눈금 레이블, 데이터 요소 등 몇 가지 차트 요소의 서식을 사용자 정의하여 레이아웃을 만들수 있습니다.
- C#
```csharp
IShape shape = worksheet.Shapes.AddChart(ChartType.ColumnClustered, 339, 247, 316.5, 346);
shape.Chart.ChartArea.Format.Line.Transparency = 1;
shape.Chart.ColumnGroups[0].Overlap = 0;
shape.Chart.ColumnGroups[0].GapWidth = 37;
IAxis category_axis = shape.Chart.Axes.Item(AxisType.Category);
category_axis.Format.Line.Color.RGB = Color.Black;
category_axis.TickLabels.Font.Size = 11;
category_axis.TickLabels.Font.Color.RGB = Color.Black;
IAxis series_axis = shape.Chart.Axes.Item(AxisType.Value);
series_axis.Format.Line.Weight = 1;
series_axis.Format.Line.Color.RGB = Color.Black;
series_axis.TickLabels.NumberFormat = "$###0";
series_axis.TickLabels.Font.Size = 11;
series_axis.TickLabels.Font.Color.RGB = Color.Black;
ISeries chartSeries = shape.Chart.SeriesCollection.NewSeries();
chartSeries.Formula = "=SERIES(\"Simple Budget\",{\"Income\",\"Expenses\"},'Sheet1'!$G$6:$G$7,1)";
chartSeries.Points[0].Format.Fill.Color.RGB = Color.FromArgb(176, 21, 19);
chartSeries.Points[1].Format.Fill.Color.RGB = Color.FromArgb(234, 99, 18);
chartSeries.DataLabels.Font.Size = 11;
chartSeries.DataLabels.Font.Color.RGB = Color.Black;
chartSeries.DataLabels.ShowValue = true;
chartSeries.DataLabels.Position = DataLabelPosition.OutsideEnd;
```
- VB
```vbnet
Dim shape As IShape = worksheet.Shapes.AddChart(ChartType.ColumnClustered, 339, 247, 316.5, 346)
shape.Chart.ChartArea.Format.Line.Transparency = 1
shape.Chart.ColumnGroups(0).Overlap = 0
shape.Chart.ColumnGroups(0).GapWidth = 37
Dim category_axis As IAxis = shape.Chart.Axes.Item(AxisType.Category)
category_axis.Format.Line.Color.RGB = Color.Black
category_axis.TickLabels.Font.Size = 11
category_axis.TickLabels.Font.Color.RGB = Color.Black
Dim series_axis As IAxis = shape.Chart.Axes.Item(AxisType.Value)
series_axis.Format.Line.Weight = 1
series_axis.Format.Line.Color.RGB = Color.Black
series_axis.TickLabels.NumberFormat = "$###0"
series_axis.TickLabels.Font.Size = 11
series_axis.TickLabels.Font.Color.RGB = Color.Black
Dim chartSeries As ISeries = shape.Chart.SeriesCollection.NewSeries()
chartSeries.Formula = "=SERIES(""Simple Budget"",{""Income"",""Expenses""},'Sheet1'!$G$6:$G$7,1)"
chartSeries.Points(0).Format.Fill.Color.RGB = Color.FromArgb(176, 21, 19)
chartSeries.Points(1).Format.Fill.Color.RGB = Color.FromArgb(234, 99, 18)
chartSeries.DataLabels.Font.Size = 11
chartSeries.DataLabels.Font.Color.RGB = Color.Black
chartSeries.DataLabels.ShowValue = True
chartSeries.DataLabels.Position = DataLabelPosition.OutsideEnd
```
## Excel로 저장
"SimpleBudget.xlsx"라는 이름으로 Excel 파일로 저장합니다.
- C#
```csharp
workbook.Save("SimpleBudget.xlsx");
```
- VB
```vbnet
workbook.Save("SimpleBudget.xlsx")
```
최종 결과물은 아래의 경로에서 [SimpleBudget.xlsx](api/examples/xlsx/tutorial?fileName=SimpleBudget)확인하여 볼수 있습니다. [튜토리얼 소스 프로젝트](api/examples/zip/both/tutorial)를 다운로드하고 코드를 직접 실행하려면 [.NET Core](https://www.microsoft.com/net/core)가 컴퓨터에 설치되어 있어야 합니다.