C#를 사용하여 XML 및 JSON에서 프로그래밍 방식으로 Excel XLSX 생성하기
페이지 정보
작성자 GrapeCity 작성일 2022-04-20 16:04 조회 2,634회 댓글 0건본문
관련링크
데이터에서 Excel 파일을 생성하는 것은 일반적인 요구 사항이며, 보통 이 작업을 수행하기 위해서는 사용자 정의 코드를 작성해야 합니다. 데이터를 서비스에 전송하고 Excel 파일로 다시 받는 것이 훨씬 쉽습니다. 데이터는 JSON, ODATA, XML 또는 DataTable을 비롯한 여러 소스로 가져올 수 있습니다. 의 Excel API를 사용하여 Excel을 생성하는 방법을 살펴보겠습니다. 이러한 REST 서비스는 호스팅할 수 있으며 WinForms, XAML, JavaScript, ASP.NET MVC 등 모든 플랫폼에 구축된 클라이언트에서 사용할 수 있습니다.
ComponentOne Web API는 다음 API로 구성됩니다.
Excel - JSON, XML, Collections에서 Excel 생성, Excel 파일 병합, 분할, 행 및 열에 대한 API 및 검색
PDF - Wijmo, ASP.NET MVC 응용 프로그램에서 FlexViewer 내부 PDF 문서를 보고, 로드하며, 캐싱하기 위해 RESTful HTTP 서비스를 구축합니다. Windows 종속성이 있습니다.
보고 - FlexReport 및 SSRS 보고서를 로드하고 캐시하기 위해 RESTful HTTP 서비스를 구축합니다. 다양한 형식으로 보고서를 내보내고, Wijmo, ASP.NET MVC 응용 프로그램 내의 FlexViewer에서 FlexReport를 확인합니다. Windows 종속성이 있습니다.
바코드 - 텍스트에서 스캔할 수 있는 바코드를 생성하고 이미지 형식으로 저장합니다.
데이터 엔진 - 메모리 내 슬라이스, 집계를 통해 대량의 데이터를 분석하고 MVC 및 Wijmo에서 OLAP 컨트롤로 데이터를 바인딩하여 클라이언트에서 추가로 분석합니다.
클라우드 저장소 - Azure, AWS, OneDrive, DropBox, GoogleDrive 등의 클라우드 저장소에서 CRUD 작업을 수행합니다. ASP.NET MVC 응용 프로그램의 FileManager에서 파일을 확인합니다.
방문자 - IP, 위치, 언어, 참조 사이트, 운영 체제, 브라우저 등의 방문자 데이터를 수집합니다. 개별 사용자를 위해 사용자 정의 콘텐츠를 전달하는 것이 유용합니다.
ODATA JSON에서 Excel 생성하기
이 예제에서는 에서 Northwind JSON 데이터를 사용하여 JSON을 Web API에 가져오고(ODATA DataConnector가 데이터 가져오기 및 기타 작업을 손쉽게 하는 방법 )을 전송합니다.
(참고: 서비스는 JSON을 전송하기 전에 완전히 제거해야 하는 추가 데이터도 전송합니다. 여기에서 JSONConvert 클래스는 원시 JSON을 역직렬화한 다음 직렬화하여 필요한 데이터를 가져오는 데 도움이 됩니다. )
원시 JSON:
private void GetExcel_Click(object sender, EventArgs e) { GenerateFromJSON(apiurl); } string apiurl = "https://www.grapecity.com/componentone/demos/aspnet/5/C1WebAPI/latest/api/excel"; //web api demo url public void GenerateFromJSON(string webapiurl) { var url = "http://services.odata.org/V4/Northwind/Northwind.svc/Products?$format=json"; //get products from ODATA service using (var clientjs = new HttpClient()) { HttpResponseMessage responseJSON = clientjs.GetAsync(url).Result; responseJSON.EnsureSuccessStatusCode(); var responseBody = responseJSON.Content.ReadAsStringAsync().Result; //Get JSON from ODATA service var data = JsonConvert.DeserializeObject(responseBody)["value"]; //use JsonConvert to deserialize raw json using (var client = new HttpClient()) using (var formData = new MultipartFormDataContent()) { var fileFormat = "xlsx"; formData.Add(new StringContent("Test"), "FileName"); formData.Add(new StringContent(fileFormat), "FileFormat"); formData.Add(new StringContent(JsonConvert.SerializeObject(data)), "Data"); //Call WebAPI to get Excel var response = client.PostAsync(webapiurl, formData).Result; if (!response.IsSuccessStatusCode) { MessageBox.Show("Invalid response."); return; } var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); if (!Directory.Exists(tempPath)) { Directory.CreateDirectory(tempPath); } //Save Excel to Tem directory. var tempFilePath = Path.Combine(tempPath, string.Format("{0}.{1}", "Test", fileFormat)); using (var newFile = File.Create(tempFilePath)) { response.Content.ReadAsStreamAsync().Result.CopyTo(newFile); } //Open Excel to view. Process.Start(tempFilePath); } } }
결과 Excel 파일:
데이터 표에서 Excel 생성
이제 ADO.NET 데이터 표의 Excel 파일 생성에 대해 살펴보겠습니다. DataTable.WriteXml 메서드를 사용하여 XML을 가져온 다음 XML을 Web API에 전송하여 Excel을 생성하겠습니다. 데이터 표 XML을 사용할 필요는 없으며 xml 데이터 파일의 콘텐츠는 하위 항목과 동일한 다중 요소가 있는 루트 요소인 컬렉션과 같아야 합니다.
<orders> <order id="1"> <price>1000</price> </order> ...... </orders>
데이터 표 XML:
private void GenerateExcel_Click(object sender, EventArgs e) { GenerateFromXML(apiurl); } string apiurl = "https://www.grapecity.com/componentone/demos/aspnet/5/C1WebAPI/latest/api/excel"; //web api demo url public void GenerateFromXML(string webapiURL) { DataTable dt = new System.Data.DataTable(); dt.TableName = "Products"; dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Product", typeof(string)); dt.Columns.Add("Active", typeof(bool)); dt.Rows.Add(1, "Electronics", true); dt.Rows.Add(2, "Food", true); dt.Rows.Add(3, "Garments", true); dt.Rows.Add(4, "Stationary", true); dt.Rows.Add(5, "Antiques", false); //Create Temp directory to save xml file var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(tempDir); string path = Path.Combine(tempDir, string.Format("{0}.{1}", "Prodcuts", "xml")); //Write to xml file dt.WriteXml(path, System.Data.XmlWriteMode.IgnoreSchema); //Create HttpClient and MultipartFormDataContent using (var client = new HttpClient()) using (var formData = new MultipartFormDataContent()) using (var fromFile=File.OpenRead(path)) { formData.Add(new StringContent("Test"), "FileName"); formData.Add(new StringContent("xlsx"), "FileFormat"); formData.Add(new StreamContent(fromFile), "DataFile",Path.GetFileName(path)); //Call WebAPI var response = client.PostAsync(webapiURL, formData).Result; if (!response.IsSuccessStatusCode) { MessageBox.Show("Invalid response."); return; } var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); if (!Directory.Exists(tempPath)) { Directory.CreateDirectory(tempPath); } //Save Excel file to Temp directory var tempFilePath = Path.Combine(tempPath, string.Format("{0}.{1}", "Test", fileFormat)); using (var newFile = File.Create(tempFilePath)) { response.Content.ReadAsStreamAsync().Result.CopyTo(newFile); } //Open In Excel Process.Start(tempFilePath); } }
XML의 결과 Excel
Web API 또는 DataServices 를 설치하는 경우 "~\Do더 많은 샘플을 찾아볼 cuments\ComponentOne Samples\Web Api" 폴더에서 수 있습니다.
Web API는 버전과 사용할 수 있습니다. DataService 에디션은 응용 프로그램을 더욱 쉽게 개발할 수 있도록 하는 아래 기능을 제공합니다.
다양한 온라인 및 클라우드 기반 소스에서 데이터 액세스 및 통합
메모리 내 캐싱 및 데이터 가상화를 활용하여 더욱 빠른 대용량 데이터 집합 로드 및 분석 전달
텍스트 파일 및 HTML 페이지를 구문 분석하여 데이터베이스가 아닌 소스에서 데이터 추출
파일 및 데이터 내보내기, 업로드 및 캐싱을 위해 웹 서비스로 앱의 권한 부여 및 확장
Web API를 통해 이미지에서 PDF로 모든 항목 내보내기
이미지, 문서, 보고서 및 바코드 다운로드, 업로드, 캐싱, 생성 및 내보내기를 위한 Web API
.NET 6, .NET Core, ASP.NET MVC, WinForms, WPF, WinUI, UWP, Xamarin 및 OS X 지원
지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.