.NET Core용 서버 측 Excel API를 사용하여 Excel 문서 생성 > 블로그 & Tips

본문 바로가기

.NET Core API

블로그 & Tips

.NET Core용 서버 측 Excel API를 사용하여 Excel 문서 생성

페이지 정보

작성자 GrapeCity 작성일 20-10-13 15:12 조회 24회 댓글 0건

본문

GcExcel .NET Core은 서버 측 Excel API로서, .NET Standard 응용 프로그램에서 스프레드시트를 생성, 로드, 저장, 변환, 계산, 서식 지정, 구문 분석, 내보내기 등을 할 수 있습니다. Windows, Linux, Mac에서 .NET Core가 완전히 지원되므로 Excel에 의존하지 않고 GcExcel을 Azure에 배포할 수 있습니다.


GcExcel을 사용하면 시스템에 Microsoft Excel이 없어도 Excel 문서를 손쉽게 생성, 로드, 저장할 수 있습니다. VSTO 스타일의 API를 이용해 사용자 정의 스타일을 생성하고, 스프레드시트를 가져오고, 데이터를 계산하고, 모든 스프레드시트를 쿼리, 생성, 내보내기할 수 있습니다. 또한 VS Tools for Office와 동일한 요소를 사용해 정렬, 필터링, 서식, 조건부 서식을 추가하고, 데이터의 유효성을 검사하고, 그룹화, 스파크라인, 차트, 도형, 그림, 슬라이서, 메모, 하이퍼링크, 테마 등을 추가할 수도 있습니다.


서버 측에서 GcExcel을 사용하는 방법

이 문서에서는 다음을 설명합니다.

  1. 서버 측에서 Excel 파일 가져오기

  2. 서버 측 Excel 파일 내보내기

  3. 서버 측에서 GcExcel을 사용해 프로그래밍하기

  4. 서버 측에서 Excel 스프레드시트 생성하기

AspNetCoreDemo 샘플을 살펴보겠습니다.


1. ASP.NET Core MVC 프로젝트 생성

  • 먼저 기본적인 ASP.NET Core MVC 응용 프로그램을 만들어 보겠습니다. Web API, Angular 또는 React.js를 사용하는 경우 어떠한 ASP.NET Core 응용 프로그램에서도 GcExcel을 사용할 수도 있습니다.

2. GcExcel 작업을 위해 Controller 클래스 추가

  • Controllers 폴더를 마우스 오른쪽 버튼으로 클릭하고 새 항목 추가(Add)를 선택합니다.

  • 대화 상자가 열리면 MVC Controller 클래스를 선택합니다.

GcExcel Controller

3. GcExcel nuget 패키지에 참조 추가

  • 마우스 오른쪽 버튼으로 종속성(Dependencies)을 클릭하고 Nuget 패키지 관리(Manage Nuget Packages)를 선택합니다.

  • 오른쪽 위의 패키지 소스에서 nuget.org를 선택합니다.

  • 찾아보기(Browse) 탭에서 GrapeCity.Documents.Excel을 입력하고 해당 패키지를 추가합니다.

GcExcel NuGet 패키지 관리자

4. GcExcel 네임스페이스를 Controller 클래스에 추가

  • 자신의 컨트롤러 클래스에서 다음과 같은 네임스페이스를 가져옵니다.

    using GrapeCity.Documents.Excel;

     

5. 서버 측에서 Excel 파일 가져오기

클라이언트 측에서 업로드한 Excel 파일을 서버 측에서 로드하거나 연 다음 JSON 구문으로 반환할 수 있습니다.

  • 방금 추가한 컨트롤러 클래스에서 IActionResult 메서드를 생성합니다.

  • GcExcel 통합 문서를 생성합니다.

  • 클라이언트 측에서 전송한 Excel 파일을 통합 문서에 로드합니다.

  • 이 파일을 다시 클라이언트 측 뷰어/편집기에서 보려면 GrapeCity의 클라이언트 측 뷰어 겸 편집기인 SpreadJS를 사용하면 됩니다. Spread.Sheets는 JSON 구문을 사용해 Excel 파일을 표시하므로 workbook.ToJson() 함수를 사용해 서버 측에서 이 파일을 JSON으로 변환할 수 있습니다. 마지막으로 이 JSON(코드 내 이름은 ssjson)을 클라이언트 측에 반환합니다.

위 단계에서 다음과 같이 이 코드를 사용합니다.

[HttpPost]
public IActionResult ImportExcel()
{
  Workbook workbook = new Workbook();
  workbook.Open(Request.Body);
  var ssjson = workbook.ToJson();
  return Ok(ssjson);
}


6. 서버 측에서 Excel 파일 내보내기

Spread.Sheets 뷰어/편집기에서 Excel 파일을 편집한 후 서버 측에서 GcExcel을 사용해 이 파일을 Excel로 내보낼 수 있습니다. workbook.FromJson을 사용해 서버 측에서 (편집된 Excel 파일의) JSON을 추출합니다. 그런 다음, 이 JSON을 xlsx로 변환하여 서버 측에서 다운로드합니다.

[HttpPost]
public FileResult ExportExcel(string fileName = "")
{
          // create a new Workbook and invoke FromJson to restore workbook from ssjson
          // the ssjson is from spread.sheets by invoking this.spread.toJSON()
          Workbook workbook = new Workbook();
          workbook.FromJson(HttpContext.Request.Body);
​
          MemoryStream stream = new MemoryStream();
          workbook.Save(stream);
          stream.Seek(0, SeekOrigin.Begin);
​
          byte[] bytes = new byte[stream.Length];
          stream.Read(bytes, 0, bytes.Length);
​
          var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
          var donwloadFile = string.Format("attachment;filename={0}.xlsx;", string.IsNullOrEmpty(fileName) ? Guid.NewGuid().ToString() :             WebUtility.UrlEncode(fileName));
​
          return File(bytes, contentType, donwloadFile);
}


7. 서버 측 Excel 스프레드시트 프로그래밍 및 생성

MS Excel이 없어도 GcExcel로 서버 측 Excel 스프레드시트를 프로그래밍하고 생성할 수 있습니다.

  • 함수에서 GcExcel을 사용해 통합 문서를 생성합니다.

  • 이 통합 문서를 JSON으로 변환하여 클라이언트 측으로 반환합니다.

참고: 이 예에서는 BidTracker.xlsx 스프레드시트만 생성합니다. 이 샘플은 서버 측에서 GcExcel로 프로그래밍할 수 있는 부가 기능을 보여줍니다.

[HttpGet("{caseName}")]
      public IActionResult GetSSJsonFromUseCase(string caseName)
      {
          Workbook workbook = CreateWorkbookByCaseName(caseName);
          var ssjson = workbook.ToJson();
          return Ok(ssjson);
      }
​
      private Workbook CreateWorkbookByCaseName(string caseName)
      {
          switch (caseName)
          {
              case "BidTracker":
                  return GetBidTracker();
              default:
                  break;
          }
​
          return new Workbook();
      }


Excel 스프레드시트를 생성하기 위한 함수를 만듭니다. 이 예에서는 다양한 GcExcel 기능을 사용하는 방법을 설명합니다.

  • 통합 문서 및 워크시트 생성

  • 데이터 추가

  • 표 추가

  • 이름이 지정된 스타일 및 조건부 서식

private Workbook GetBidTracker()
{
            Workbook workbook = new Workbook();
            IWorksheet worksheet = workbook.Worksheets[0];
​
            //***********************Set RowHeight & ColumnWidth***************
          worksheet.StandardHeight = 30;
          worksheet.Range["1:1"].RowHeight = 57.75;
          worksheet.Range["2:9"].RowHeight = 30;
          worksheet.Range["A:A"].ColumnWidth = 2.71;
          worksheet.Range["B:B"].ColumnWidth = 11.71;
          worksheet.Range["C:C"].ColumnWidth = 28;
          worksheet.Range["D:D"].ColumnWidth = 22.425;
          worksheet.Range["E:E"].ColumnWidth = 16.71;
          worksheet.Range["F:F"].ColumnWidth = 28;
          worksheet.Range["G:H"].ColumnWidth = 16.71;
          worksheet.Range["I:I"].ColumnWidth = 2.71;
​
          //**************************Set Table Value & Formulas*********************
          ITable table = worksheet.Tables.Add(worksheet.Range["B2:H9"], true);
          worksheet.Range["B2:H9"].Value = new object[,]
          {
              { "BID #", "DESCRIPTION", "DATE RECEIVED", "AMOUNT", "PERCENT COMPLETE", "DEADLINE", "DAYS LEFT" },
              { 1, "Bid number 1", null, 2000, 0.5, null, null },
              { 2, "Bid number 2", null, 3500, 0.25, null, null },
              { 3, "Bid number 3", null, 5000, 0.3, null, null },
              { 4, "Bid number 4", null, 4000, 0.2, null, null },
              { 5, "Bid number 5", null, 4000, 0.75, null , null },
              { 6, "Bid number 6", null, 1500, 0.45, null , null },
              { 7, "Bid number 7", null, 5000, 0.65, null, null },
          };
          worksheet.Range["B1"].Value = "Bid Details";
          worksheet.Range["D3"].Formula = "=TODAY()-10";
          worksheet.Range["D4:D5"].Formula = "=TODAY()-20";
          worksheet.Range["D6"].Formula = "=TODAY()-10";
          worksheet.Range["D7"].Formula = "=TODAY()-28";
          worksheet.Range["D8"].Formula = "=TODAY()-17";
          worksheet.Range["D9"].Formula = "=TODAY()-15";
          worksheet.Range["G3:G9"].Formula = "=[@[DATE RECEIVED]]+30";
          worksheet.Range["H3:H9"].Formula = "=[@DEADLINE]-TODAY()";
​
          //****************************Set Table Style********************************
​
          //****************************Set Table Style********************************
          ITableStyle tableStyle = workbook.TableStyles.Add("Bid Tracker");
          workbook.DefaultTableStyle = "Bid Tracker";
​
          var wholeTableStyle = tableStyle.TableStyleElements[TableStyleElementType.WholeTable];
​
          //Set WholeTable element style.
          wholeTableStyle.Font.Color = Color.FromRGB(89, 89, 89);
          wholeTableStyle.Borders.Color = Color.FromRGB(89, 89, 89);
          wholeTableStyle.Borders[BordersIndex.EdgeLeft].LineStyle = BorderLineStyle.Thin;
          wholeTableStyle.Borders[BordersIndex.EdgeRight].LineStyle = BorderLineStyle.Thin;
          wholeTableStyle.Borders[BordersIndex.EdgeTop].LineStyle = BorderLineStyle.Thin;
          wholeTableStyle.Borders[BordersIndex.EdgeBottom].LineStyle = BorderLineStyle.Thin;
          wholeTableStyle.Borders[BordersIndex.InsideVertical].LineStyle = BorderLineStyle.Thin;
          wholeTableStyle.Borders[BordersIndex.InsideHorizontal].LineStyle = BorderLineStyle.Thin;
​
          var headerRowStyle = tableStyle.TableStyleElements[TableStyleElementType.HeaderRow];
​
          //Set HeaderRow element style.
          headerRowStyle.Borders.Color = Color.FromRGB(89, 89, 89);
          headerRowStyle.Borders[BordersIndex.EdgeLeft].LineStyle = BorderLineStyle.Thin;
          headerRowStyle.Borders[BordersIndex.EdgeRight].LineStyle = BorderLineStyle.Thin;
          headerRowStyle.Borders[BordersIndex.EdgeTop].LineStyle = BorderLineStyle.Thin;
          headerRowStyle.Borders[BordersIndex.EdgeBottom].LineStyle = BorderLineStyle.Thin;
          headerRowStyle.Borders[BordersIndex.InsideVertical].LineStyle = BorderLineStyle.Thin;
          headerRowStyle.Borders[BordersIndex.InsideHorizontal].LineStyle = BorderLineStyle.Thin;
          headerRowStyle.Interior.Color = Color.FromRGB(131, 95, 1);
          headerRowStyle.Interior.PatternColor = Color.FromRGB(254, 184, 10);
​
​
          var totalRowStyle = tableStyle.TableStyleElements[TableStyleElementType.TotalRow];
​
          //Set TotalRow element style.
          totalRowStyle.Borders.Color = Color.White;
          totalRowStyle.Borders[BordersIndex.EdgeLeft].LineStyle = BorderLineStyle.Thin;
          totalRowStyle.Borders[BordersIndex.EdgeRight].LineStyle = BorderLineStyle.Thin;
          totalRowStyle.Borders[BordersIndex.EdgeTop].LineStyle = BorderLineStyle.Thin;
          totalRowStyle.Borders[BordersIndex.EdgeBottom].LineStyle = BorderLineStyle.Thin;
          totalRowStyle.Borders[BordersIndex.InsideVertical].LineStyle = BorderLineStyle.Thin;
          totalRowStyle.Borders[BordersIndex.InsideHorizontal].LineStyle = BorderLineStyle.Thin;
          totalRowStyle.Interior.Color = Color.FromRGB(131, 95, 1);
​
​
          //***********************************Set Named Styles*****************************
          IStyle titleStyle = workbook.Styles["Title"];
          titleStyle.Font.Name = "Calibri";
          titleStyle.Font.Size = 36;
          titleStyle.Font.Color = Color.FromRGB(56, 145, 167);
          titleStyle.IncludeAlignment = true;
          titleStyle.VerticalAlignment = VerticalAlignment.Center;
​
          IStyle heading1Style = workbook.Styles["Heading 1"];
          heading1Style.IncludeAlignment = true;
          heading1Style.HorizontalAlignment = HorizontalAlignment.Left;
          heading1Style.IndentLevel = 1;
          heading1Style.VerticalAlignment = VerticalAlignment.Bottom;
          heading1Style.Borders[BordersIndex.EdgeBottom].LineStyle = BorderLineStyle.None;
          heading1Style.Font.Size = 14;
          heading1Style.Font.Color = Color.White;
          heading1Style.Font.Bold = false;
          heading1Style.IncludePatterns = true;
          heading1Style.Interior.Color = Color.FromRGB(131, 95, 1);
​
          IStyle dateStyle = workbook.Styles.Add("Date");
          dateStyle.IncludeNumber = true;
          dateStyle.NumberFormat = "m/d/yyyy";
          dateStyle.IncludeAlignment = true;
          dateStyle.HorizontalAlignment = HorizontalAlignment.Left;
          dateStyle.IndentLevel = 1;
          dateStyle.VerticalAlignment = VerticalAlignment.Center;
          dateStyle.IncludeFont = false;
          dateStyle.IncludeBorder = false;
          dateStyle.IncludePatterns = false;
​
          IStyle commaStyle = workbook.Styles["Comma"];
          commaStyle.IncludeNumber = true;
          commaStyle.NumberFormat = "#,##0_);(#,##0)";
          commaStyle.IncludeAlignment = true;
          commaStyle.HorizontalAlignment = HorizontalAlignment.Left;
          commaStyle.IndentLevel = 1;
          commaStyle.VerticalAlignment = VerticalAlignment.Center;
​
          IStyle normalStyle = workbook.Styles["Normal"];
          normalStyle.HorizontalAlignment = HorizontalAlignment.Left;
          normalStyle.IndentLevel = 1;
          normalStyle.VerticalAlignment = VerticalAlignment.Center;
          normalStyle.WrapText = true;
          normalStyle.Font.Color = Color.FromRGB(89, 89, 89);
​
          IStyle currencyStyle = workbook.Styles["Currency"];
          currencyStyle.NumberFormat = "$#,##0.00";
          currencyStyle.IncludeAlignment = true;
          currencyStyle.HorizontalAlignment = HorizontalAlignment.Left;
          currencyStyle.IndentLevel = 1;
          currencyStyle.VerticalAlignment = VerticalAlignment.Center;
​
          IStyle percentStyle = workbook.Styles["Percent"];
          percentStyle.IncludeAlignment = true;
          percentStyle.HorizontalAlignment = HorizontalAlignment.Right;
          percentStyle.VerticalAlignment = VerticalAlignment.Center;
          percentStyle.IncludeFont = true;
          percentStyle.Font.Name = "Calibri";
          percentStyle.Font.Size = 20;
          percentStyle.Font.Bold = true;
          percentStyle.Font.Color = Color.FromRGB(89, 89, 89);
​
          IStyle comma0Style = workbook.Styles["Comma [0]"];
          comma0Style.NumberFormat = "#,##0_);(#,##0)";
          comma0Style.IncludeAlignment = true;
          comma0Style.HorizontalAlignment = HorizontalAlignment.Right;
          comma0Style.IndentLevel = 3;
          comma0Style.VerticalAlignment = VerticalAlignment.Center;
​
          //************************************Add Conditional Formatting****************
          IDataBar dataBar = worksheet.Range["F3:F9"].FormatConditions.AddDatabar();
          dataBar.MinPoint.Type = ConditionValueTypes.Number;
          dataBar.MinPoint.Value = 1;
          dataBar.MaxPoint.Type = ConditionValueTypes.Number;
          dataBar.MaxPoint.Value = 0;
​
          dataBar.BarFillType = DataBarFillType.Gradient;
          dataBar.BarColor.Color = Color.FromRGB(126, 194, 211);
          dataBar.Direction = DataBarDirection.Context;
​
          dataBar.AxisColor.Color = Color.Black;
          dataBar.AxisPosition = DataBarAxisPosition.Automatic;
​
          dataBar.NegativeBarFormat.ColorType = DataBarNegativeColorType.Color;
          dataBar.NegativeBarFormat.Color.Color = Color.Red;
          dataBar.ShowValue = true;
​
          //****************************************Use NamedStyle**************************
          worksheet.SheetView.DisplayGridlines = false;
          table.TableStyle = tableStyle;
          worksheet.Range["B1"].Style = titleStyle;
          worksheet.Range["B1"].WrapText = false;
          worksheet.Range["B2:H2"].Style = heading1Style;
          worksheet.Range["B3:B9"].Style = commaStyle;
          worksheet.Range["C3:C9"].Style = normalStyle;
          worksheet.Range["D3:D9"].Style = dateStyle;
          worksheet.Range["E3:E9"].Style = currencyStyle;
          worksheet.Range["F3:F9"].Style = percentStyle;
          worksheet.Range["G3:G9"].Style = dateStyle;
          worksheet.Range["H3:H9"].Style = comma0Style;
​
          return workbook;
}


Excel 파일은 다음과 같이 표시됩니다.

GcExcel NuGet 패키지 관리자

서버 측에서 GcExcel을 사용해 프로그래밍할 수 있는 부가 기능이 많이 있습니다. 자세한 내용과 전체 기능 목록, 무료 평가판 다운로드는 GCExcel API for .NET Core을 방문하시기 바랍니다.


샘플 다운로드

  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@grapecity.com | 전화 : 1670-0583 | 경기도 안양시 동안구 시민대로 230, B-703(관양동, 아크로타워) 그레이프시티(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 Copyright ⓒ 2020 GrapeCity inc.