자습서

# 스프레드시트 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)가 컴퓨터에 설치되어 있어야 합니다.