! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

C# .NET에서 프로그래밍을 통해 CSV를 Excel XLSX로 변환하는 방법 > 온라인 스터디

본문 바로가기

C# .NET에서 프로그래밍을 통해 CSV를 Excel XLSX로 변환하는 방법

페이지 정보

작성자 MESCIUS 작성일 2023-11-23 11:46 조회 34회 댓글 0건

본문

첨부파일

Microsoft Excel XLSX 및 텍스트 기반 CSV(쉼표로 구분된 값)는 데이터 상호 교환을 위한 공통 파일 형식입니다.


이러한 파일 형식의 읽기 및 쓰기 지원을 구현하면 응용 프로그램은 상당한 이점을 얻을 수 있습니다.


이 예제에서는 아래의 내용을 진행할 것입니다.

  1. 최신 월간 Bitcoin-US Dollar 시장 데이터를 CSV 형식으로 다운로드
  2. 해당 CSV 데이터를 플랫폼 전반에서 작동하는 C# Web Service Application으로 가지고 오기
  3. 해당 데이터를 포함하는 새 XLSX 스프레드시트를 차트 및 추세선이 있는 표 형식으로 생성해 이동 평균 분석 

 

웹 응용 프로그램은 표준 Open Object XML(OOXML) 스프레드시트 파일을 읽는 스프레드시트 응용 프로그램이라면 어디에서든 열 수 있는 XLSX 스프레드시트를 반환합니다.


데이터를 가져오기 위한 AlphaVantage 웹 서비스(코드 예제 사용할 무료 API 키를 받으려면 링크 따라가기) 및 CSV 데이터 가져오기가 기본적으로 지원되는 DsExcel를 사용합니다.


 표, 차트 등이 포함된 새 스프레드시트를 생성하고 다음 단계에 따라 새 XLSX을 내보냅니다.

  1. 프로젝트 만들기 [Visual Studio 2022를 사용하여 새 ASP.NET Core Web API 프로젝트 만들기]

  2. 데이터 쿼리 [AlphaVantage 웹 서비스를 사용하여 CSV 형식의 월간 BTC-USD 데이터 받기]

  3. CSV 로드 [Excel.NET API용 GrapeCity Documents 사용하기]

  4. CSV 처리 [열 재정렬, 표 만들기, 추세선으로 차트 만들기]

  5. XLSX 반환 [Excel.NET API용 GrapeCity Documents 사용하기]


이번 스터디의 샘플을 다운로드하여 같이 진행해 주시길 바랍니다!


 

프로젝트 만들기


Visual Studio 2022를 사용하여 새 프로젝트(CTRL+SHIFT+N)를 만들겠습니다.


드롭다운에서 C#, All Platforms, WebAPI를 선택합니다.


ASP.NET Core Web API 프로젝트 유형을 찾아 선택하고 다음을 클릭합니다.

img

[그림 1] Visual Studio 2022에서 새 ASP.NET Core Web API 프로젝트 만들기


프로젝트 이름으로 BTC_Chart_WebService를 입력하고 프로젝트 위치를 선택한 후 다음을 클릭합니다.

img

[그림 2] Visual Studio 2022에서 새 ASP.NET Core Web API 프로젝트 구성


프레임워크.NET 6.0(Long-term-support) 이상을 선택합니다.


대화 상자에서 다른 구성에 대해 기본값이 선택된 상태로 다음을 클릭합니다.

img

[그림 3] Framework 대상 구성


일기 예보를 반환하는 샘플 코드가 포함된 ASP.NET Core WebAPI 템플릿이 생성됩니다.


이 프로젝트에서는 필요하지 않지만 컨트롤러를 재사용하고, 용도를 변경할 수도 있습니다.


솔루션 탐색기(CTRL+ALT+L)를 사용하겠습니다.


프로젝트에서 컨트롤러 파일(컨트롤러 아래에 있음)의 이름을 BTCChartController.cs로 변경합니다.

img

[그림 4] 컨트롤러에서 WeatherForecastController.cs 파일의 이름을 BTCChartController.cs로 변경


파일 이름을 변경하면 Visual Studio에는 프로젝트의 코드 참조를 모두 변경할지 묻는 프롬프트가 나타납니다.


대화 상자에서 예(YES)를 클릭합니다.

img

[그림 5] 코드 참조 이름 변경 - 여기서 클릭


그런 다음 WeatherForecast.cs 프로젝트 파일을 선택하여 프로젝트에서 삭제(DEL)합니다.


정말로 삭제할지 묻는 대화 상자에서 예(OK)를 클릭합니다.

img

[그림 6] 프로젝트에서 WeatherForecast.cs 삭제 확인


이제 솔루션 탐색기(CTRL+ALT+L)에서 종속성을 마우스 오른쪽 버튼으로 클릭합니다.


NuGet 패키지 관리를 선택합니다.

img

[그림 7] 솔루션 탐색기 종속성에서 NuGet 패키지 관리 열기


NuGet.org에서 GrapeCity.Documents.Excel을 검색하여 프로젝트에 최신 버전(6.2.0 이상)을 설치합니다.


 

데이터 쿼리


솔루션 탐색기(CTRL+ALT+L)에서 편집할 BTCChartController.cs 파일을 선택합니다.


일기 예보와 관련된 요약 코드를 주석 처리합니다.


BTCChartController

public class BTCChartController : ControllerBase { // private static readonly string[] Summaries = new[] // { // "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" //};


위 주석 처리된 코드 아래에 다음 코드를 추가하여, AlphaVantage 웹 서비스에 CSV 형식의 BTC-USD 월간 데이터를 쿼리합니다.

코드에서 API키로 대체합니다.

GetCSVData

// Get the CSV data from the AlphaVantage web service private string GetCsvData() { string csv; string API_KEY = "YOUR_KEY_HERE"; string QUERY_URL = $"https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_MONTHLY&symbol=BTC&market=USD&apikey={API_KEY}&datatype=csv"; Uri queryUri = new Uri(QUERY_URL); using (HttpClient client = new HttpClient()) { Task<string> t = client.GetStringAsync(queryUri); while (!t.IsCompleted) t.Wait(); csv = t.Result; } return csv; }


   
CSV 로드 


이제 Get() 메서드의 코드를 다음 코드 조각으로 바꿉니다.


이는 다음을 수행합니다.

  • HttpGet 속성의 이름GetBTC-USDChartWorkbook으로 업데이트

  • 반환 유형을 FileContentResult로 변경

  • 일기 예보와 관련된 코드 주석 처리

  • GetCsvData()를 호출하는 코드를 추가하고 새 통합 문서로 가져오기


BTCChartController.Get

[HttpGet(Name = "GetBTC-USDChartWorkbook")]
//public IEnumerable<WeatherForecast> Get()
public FileContentResult Get()
{
    //return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    //{
    //    Date = DateTime.Now.AddDays(index),
    //    TemperatureC = Random.Shared.Next(-20, 55),
    //    Summary = Summaries[Random.Shared.Next(Summaries.Length)]
    //})
    //.ToArray();
  
    // first get CSV data
    string csv = GetCsvData();
  
    // create new workbook
    IWorkbook wbk = new Workbook();
    // open CSV data in GcExcel using MemoryStream
    using (Stream s = new MemoryStream())
    {   // convert to byte array using UTF8 encoding
        byte[] arr = System.Text.Encoding.UTF8.GetBytes(csv.ToCharArray());
        s.Write(arr);
        s.Seek(0, SeekOrigin.Begin);
        // open CSV in workbook
        wbk.Open(s, OpenFileFormat.Csv);
    }


※ 참고: GrapeCity.Documents.Excel에 대한 어셈블리 참조는 자동으로 BTCChartController.cs 파일에 추가됩니다.   

그렇지 않으면 수동으로 추가해 주시길 바랍니다.


 

CSV 처리


통합 문서에서 CSV를 처리하기 위해 다음 코드를 복사합니다.

이전 코드 조각의 using 블록 다음입니다.


BTCChartController.Get

// get the worksheet with the CSV data IWorksheet wks = wbk.Worksheets[0]; // move volume to column B, before open/high/low/close // it works better to create the StockVOHLC chart with // the series in the correct order (date-volume-open-high-low-close) wks.Range["B:B"].Insert(); wks.Range["K:K"].Copy(wks.Range["B:B"]); wks.Range["K:K"].Delete(); // get the range containing the CSV data IRange used = wks.UsedRange; // create a new Table for the CSV data named "BTC_Monthly" ITable tbl = wks.Tables.Add(used, true); tbl.Name = "BTC_Monthly"; // auto-fit the columns in the table to show all the cell values used.AutoFit(); // add the StockVOHLC chart shape over the table (the table is completely beneath the chart) IShape shape = wks.Shapes.AddChart(ChartType.StockVOHLC, 0, 0, used.Width, used.Height); // get the IChart from the shape IChart chart = shape.Chart; // set the chart title chart.ChartTitle.Text = "BitCoin Monthly Open-High-Low-Close-Volume"; // add the chart series (the first 6 columns in the table) chart.SeriesCollection.Add(wks.Range[0, 0, used.RowCount, 6], RowCol.Columns, true, true); // change category axis base to months IAxis categoryAxis = chart.Axes.Item(AxisType.Category); categoryAxis.BaseUnit = TimeUnit.Months; // change category axis tick label orientation and number format categoryAxis.TickLabels.Orientation = 45; categoryAxis.TickLabels.NumberFormat = "d/m/yyyy"; // add trend line for Volume series in Blue ITrendline voltrend = chart.SeriesCollection[0].Trendlines.Add(); voltrend.Name = "3 Month Moving Avg VOL"; voltrend.Type = TrendlineType.MovingAvg; voltrend.Period = 3; voltrend.Format.Line.Color.RGB = Color.Blue; voltrend.Format.Line.DashStyle = LineDashStyle.RoundDot; // add trend line for High series in Green ITrendline hightrend = chart.SeriesCollection[2].Trendlines.Add(); hightrend.Name = "3 Month Moving Avg HIGH"; hightrend.Type = TrendlineType.MovingAvg; hightrend.Period = 3; hightrend.Format.Line.Color.RGB = Color.Green; hightrend.Format.Line.DashStyle = LineDashStyle.RoundDot; // add trend line for Low series in Red ITrendline lowtrend = chart.SeriesCollection[3].Trendlines.Add(); lowtrend.Name = "3 Month Moving Avg LOW"; lowtrend.Type = TrendlineType.MovingAvg; lowtrend.Period = 3; lowtrend.Format.Line.Color.RGB = Color.Red; lowtrend.Format.Line.DashStyle = LineDashStyle.RoundDot;


먼저, 이 코드는 CSV 데이터가 포함된 워크시트를 가지고 와 열을 재정렬합니다.

Volume열을 Data열과 Open열 사이에 배치합니다.


그런 다음 CSV 데이터가 포함된 BTC_Monthly라는 테이블을 생성하고 테이블의 열을 자동으로 맞춥니다. 


그러면 코드는 전체 테이블 범위에 걸쳐 워크시트에 StockVOHLC 유형(거래량-시가-고가-저가-종가)의 새 차트를 추가합니다.


차트 제목을 설정하고, 시리즈를 차트에 추가하고, 범주 축 단위를 월로 변경합니다.


다음으로 범주 축 눈금 레이블 방향 및 숫자 형식을 업데이트한 후 세 개의 추세선을 생성합니다.


추세선은 볼륨에 대한 3개월 이동 평균을 파란색으로, 고가는 녹색, 저가는 적색으로 표시합니다.


 

XLSX 반환


마지막으로 이전 코드 뒤에 하단의 코드를 복사합니다.


통합 문서를 XLSX로 저장하고 웹 서비스에서 반환합니다.

// Save Workbook to XLSX and return from web service as "BTC_Chart.xlsx" using (MemoryStream ms = new MemoryStream()) { wbk.Save(ms, SaveFileFormat.Xlsx); ms.Seek(0, SeekOrigin.Begin); byte[] bytes = ms.ToArray(); return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "BTC_Chart.xlsx"); } } // Get()


프로젝트가 완료되었으며 실행할 준비가 끝났습니다!


F5를 눌러 디버그 모드를 실행하고 테스트해 볼 수 있습니다.

img

[그림 8] F5를 눌러 디버그에서 BTC_Chart_WebService 실행


드롭 다운을 열고 사용해 보기를 클릭합니다.

img

[그림 9] 사용해 보기를 눌러 웹 서비스 테스트


실행을 클릭하면 성공 결과와 함께 XLSX 파일 다운로드 링크가 바로 나타납니다.

img

[그림 10] 성공 결과 및 XLSX 파일 다운로드 링크


결과 차트는 다음과 같이 Excel 파일로 표시됩니다.

차트 결과


 




지금 바로 DsExcel .NET을 다운로드하여 직접 테스트해 보세요!


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.