etc./StackOverFlow

Microsoft Office를 설치하지 않고 C#에서 Excel(.XLS 및 .XLSX) 파일을 어떻게 만듭니까?

청렴결백한 만능 재주꾼 2021. 12. 20. 10:11
반응형

질문자 :Community Wiki


코드를 실행하는 컴퓨터에 Excel을 설치하지 않고도 C#으로 Excel 스프레드시트를 만들려면 어떻게 해야 합니까?



ExcelLibrary라는 라이브러리를 사용할 수 있습니다. Google 코드에 게시된 무료 오픈 소스 라이브러리입니다.

엑셀라이브러리

이것은 위에서 언급한 PHP ExcelWriter의 포트인 것 같습니다. 아직 새로운 .xlsx 형식에 쓰지는 않지만 해당 기능을 추가하기 위해 노력하고 있습니다.

매우 간단하고 작고 사용하기 쉽습니다. 또한 DataSet 및 DataTable을 사용하여 Excel 데이터로 쉽게 작업할 수 있는 DataSetHelper가 있습니다.

ExcelLibrary는 여전히 이전 Excel 형식(.xls 파일)에서만 작동하는 것으로 보이지만 향후 2007/2010 형식에 대한 지원을 추가할 수 있습니다.

Excel 2007/2010 형식 파일(.xlsx 파일)에만 작동 하는 EPPlus 를 사용할 수도 있습니다. 둘 다 작동하는 NPOI 도 있습니다.

주석에 언급된 대로 각 라이브러리에는 몇 가지 알려진 버그가 있습니다. 결국 시간이 지날수록 EPPlus가 최선의 선택인 것 같습니다. 더 적극적으로 업데이트되고 문서화되는 것 같습니다.

또한 아래 @АртёмЦарионов가 언급한 것처럼 EPPlus는 피벗 테이블을 지원하고 ExcelLibrary는 일부 지원을 제공할 수 있습니다( ExcelLibrary의 피벗 테이블 문제 ).

다음은 빠른 참조를 위한 몇 가지 링크입니다.
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU(LGPL) - 더 이상 유지되지 않음
EPPlus 5 - Polyform Noncommercial - 2020년 5월부터
NPOI - Apache 라이선스

다음은 ExcelLibrary에 대한 몇 가지 예제 코드입니다.

다음은 데이터베이스에서 데이터를 가져와서 통합 문서를 만드는 예입니다. ExcelLibrary 코드는 맨 아래에 있는 한 줄입니다.

 //Create the data set and table DataSet ds = new DataSet("New_DataSet"); DataTable dt = new DataTable("New_DataTable"); //Set the locale for each ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture; dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture; //Open a DB connection (in this example with OleDB) OleDbConnection con = new OleDbConnection(dbConnectionString); con.Open(); //Create a query and fill the data table with the data from the DB string sql = "SELECT Whatever FROM MyDBTable;"; OleDbCommand cmd = new OleDbCommand(sql, con); OleDbDataAdapter adptr = new OleDbDataAdapter(); adptr.SelectCommand = cmd; adptr.Fill(dt); con.Close(); //Add the table to the data set ds.Tables.Add(dt); //Here's the easy part. Create the Excel worksheet from the data set ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

Excel 파일을 만드는 것은 그만큼 쉽습니다. Excel 파일을 수동으로 만들 수도 있지만 위의 기능이 정말 인상적이었습니다.


Community Wiki

xlsx 형식에 만족한다면 내 GitHub 프로젝트인 EPPlus를 사용해 보세요. ExcelPackage의 소스로 시작했지만 오늘은 완전히 다시 작성했습니다. 범위, 셀 스타일, 차트, 모양, 그림, 명명된 범위, 자동 필터 및 기타 많은 것들을 지원합니다.


Community Wiki

Microsoft Office용 Open XML SDK 2.0을 사용하는 것은 어떻습니까?

몇 가지 이점:

  • Office 설치가 필요하지 않음
  • Microsoft에서 만든 = 괜찮은 MSDN 문서
  • 프로젝트에서 사용할 단 하나의 .Net dll
  • SDK는 diff, validator 등과 같은 많은 도구와 함께 제공됩니다.

연결:


Community Wiki

나는 다음 오픈 소스 프로젝트를 성공적으로 사용했습니다.

  • OOXML 형식용 ExcelPackage(Office 2007)

  • .XLS 형식용 NPOI(Office 2003). NPOI 2.0 (베타)도 XLSX를 지원합니다.

내 블로그 게시물을 살펴보십시오.

C#에서 Excel 스프레드시트 .XLS 및 .XLSX 만들기

Excel 표 및 동적 차트가 있는 NPOI


Community Wiki

OLEDB를 사용하여 Excel 파일을 만들고 조작할 수 있습니다. 이것을 확인하십시오: OLEDB를 사용하여 Excel 읽기 및 쓰기 .

전형적인 예:

 using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'")) { conn.Open(); OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn); cmd.ExecuteNonQuery(); }

편집 - 더 많은 링크:


Community Wiki

상용 솔루션인 .NET용 SpreadsheetGear 가 이를 수행합니다.

여기에서 라이브 ASP.NET(C# 및 VB) 샘플을 볼 수 있고 여기에서 평가판을 다운로드할 수 있습니다 .

면책 조항: 나는 SpreadsheetGear LLC를 소유하고 있습니다.


Community Wiki

내가 사용한 몇 가지 옵션:

XLSX가 필수인 경우: ExcelPackage 는 좋은 시작이지만 개발자가 작업을 중단하면 사라졌습니다. ExML은 거기에서 선택하여 몇 가지 기능을 추가했습니다. ExML 은 나쁜 옵션이 아닙니다. 저는 여전히 몇 개의 프로덕션 웹사이트에서 사용하고 있습니다.

하지만 모든 새 프로젝트에서 Apache POI 의 .NET 포트인 NPOI 를 사용하고 있습니다. NPOI 2.0(알파) 도 XLSX를 지원합니다.


Community Wiki

매우 가벼운 옵션은 HTML 테이블을 사용하는 것일 수 있습니다. 파일에 head, body, table 태그를 만들고 확장자가 .xls인 파일로 저장하기만 하면 됩니다. 수식을 포함하여 출력 스타일을 지정하는 데 사용할 수 있는 Microsoft 관련 특성이 있습니다.

웹 응용 프로그램에서 이것을 코딩하지 않을 수도 있다는 것을 알고 있지만 여기에 HTML 테이블을 통한 Excel 파일 구성의 예가 있습니다. 이 기술은 콘솔 앱, 데스크톱 앱 또는 서비스를 코딩하는 경우에 사용할 수 있습니다.


Community Wiki

Excel 2007/2010 파일을 만드는 경우 이 오픈 소스 프로젝트를 시도해 보십시오: https://github.com/closedxml/closedxml

XML 문서의 번거로움을 처리하지 않고 파일(VBA와 유사)을 조작하는 객체 지향 방식을 제공합니다. C# 및 Visual Basic(VB)과 같은 모든 .NET 언어에서 사용할 수 있습니다.

ClosedXML을 사용하면 Excel 응용 프로그램 없이 Excel 2007/2010 파일을 만들 수 있습니다. 일반적인 예는 웹 서버에서 Excel 보고서를 만드는 것입니다.

 var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell("A1").Value = "Hello World!"; workbook.SaveAs("HelloWorld.xlsx");

Community Wiki

ExcelXmlWriter 를 사용할 수 있습니다.

잘 작동합니다.


Community Wiki

실제로 C#에서 사용 가능한 interop 클래스(예: Microsoft.Office.Interop.Excel . OLE 없음(이것은 아님)라고 말하지만 interop 클래스는 사용하기 매우 쉽습니다. C# 문서 확인 여기 (Interop for Excel은 C# PDF의 1072페이지에서 시작).

당신이 그들을 시도하지 않은 경우 감동할 수 있습니다.

이에 대한 Microsoft의 입장 에 대해 경고하십시오.

Microsoft는 현재 자동, 비대화형 클라이언트 응용 프로그램 또는 구성 요소(ASP, ASP.NET, DCOM 및 NT 서비스 포함)에서 Microsoft Office 응용 프로그램 자동화를 권장하지 않으며 지원하지 않습니다. 또는 이 환경에서 Office를 실행할 때 교착 상태가 발생합니다.


Community Wiki

DataSet , DataTable 또는 List<> 에서 정품 Excel 2007 .xlsx 파일로 내보낼 수 있는 완전 무료 C# 라이브러리입니다.

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

전체 소스 코드가 지침 및 데모 응용 프로그램과 함께 무료로 제공됩니다.

이 클래스를 애플리케이션에 추가한 후 단 한 줄의 코드로 DataSet을 Excel로 내보낼 수 있습니다.

 CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");

그것보다 훨씬 간단하지 않습니다 ...

그리고 서버에 Excel이 있을 필요도 없습니다.


Community Wiki

XML 스프레드시트 2003 형식을 사용하여 파일을 만드는 것을 고려할 수 있습니다. 이것은 잘 문서화된 스키마를 사용하는 간단한 XML 형식입니다.


Community Wiki

GemBox.Spreadsheet 를 살펴볼 수 있습니다.

모든 기능이 포함된 무료 버전이 있지만 필요에 따라 시트당 150개 행과 통합 문서당 5개로 제한됩니다.

아직 직접 사용할 필요는 없지만 흥미롭게 보입니다.


Community Wiki

Syncfusion Essential XlsIO 가 이 작업을 수행할 수 있습니다. Microsoft Office에 대한 종속성이 없으며 다양한 플랫폼에 대한 특정 지원도 있습니다.

코드 샘플:

 //Creates a new instance for ExcelEngine. ExcelEngine excelEngine = new ExcelEngine(); //Loads or open an existing workbook through Open method of IWorkbooks IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName); //To-Do some manipulation| //To-Do some manipulation //Set the version of the workbook. workbook.Version = ExcelVersion.Excel2013; //Save the workbook in file system as xlsx format workbook.SaveAs(outputFileName);

자격이 있는 경우 커뮤니티 라이선스 프로그램을 통해 전체 컨트롤 제품군을 무료로 사용할 수 있습니다(매출 100만 달러 미만). 참고: 저는 Syncfusion에서 일합니다.


Community Wiki

잘,

Aspose 와 같은 타사 라이브러리를 사용할 수도 있습니다.

이 라이브러리는 귀하의 컴퓨터에 Excel을 설치할 필요가 없다는 이점이 있어 귀하의 경우에 이상적입니다.


Community Wiki

사용 가능한 다양한 Office 2003 XML 라이브러리는 더 작은 Excel 파일에 매우 적합합니다. 그러나 XML 형식으로 저장된 큰 통합 문서의 크기가 문제라는 것을 알았습니다. 예를 들어, 내가 작업하는 통합 문서는 40MB의 새로운 XLSX 형식으로 360MB XML 파일이 됩니다.

내가 조사한 바에 따르면 이전 바이너리 파일 형식으로 출력할 수 있는 두 가지 상용 패키지가 있습니다. 그들은:

둘 다 저렴하지 않습니다(각각 500USD와 800USD). 그러나 둘 다 Excel 자체와 독립적으로 작동합니다.

내가 궁금한 것은 OpenOffice.org와 같은 Excel 출력 모듈입니다. Java에서 .Net으로 이식할 수 있는지 궁금합니다.


Community Wiki

OpenXML은 서버에 MS Excel을 설치하지 않아도 되는 좋은 대안이기도 합니다. Microsoft에서 제공하는 Open XML SDK 2.0은 Open XML 패키지와 패키지 내의 기본 Open XML 스키마 요소를 조작하는 작업을 단순화합니다. Open XML API(응용 프로그래밍 인터페이스)는 개발자가 Open XML 패키지에서 수행하는 많은 일반적인 작업을 캡슐화합니다.

OpenXML: 서버에 MS Excel 설치를 방지하는 대안을 확인하십시오.


Community Wiki

System.IO.StreamWriter를 사용하여 Excel 개체를 사용하지 않고 데이터 세트를 Excel로 내보내는 간단한 코드를 작성했습니다.

아래는 데이터셋에서 모든 테이블을 읽고 시트에 하나씩 쓰는 코드입니다. 나는 이 글 에서 도움을 받았다.

 public static void exportToExcel(DataSet source, string fileName) { const string endExcelXML = "</Workbook>"; const string startExcelXML = "<xml version>\r\n<Workbook " + "xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" + " xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " + "xmlns:x=\"urn:schemas- microsoft-com:office:" + "excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" + "office:spreadsheet\">\r\n <Styles>\r\n " + "<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " + "<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" + "\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" + "\r\n <Protection/>\r\n </Style>\r\n " + "<Style ss:ID=\"BoldColumn\">\r\n <Font " + "x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " + "<Style ss:ID=\"StringLiteral\">\r\n <NumberFormat" + " ss:Format=\"@\"/>\r\n </Style>\r\n <Style " + "ss:ID=\"Decimal\">\r\n <NumberFormat " + "ss:Format=\"0.0000\"/>\r\n </Style>\r\n " + "<Style ss:ID=\"Integer\">\r\n <NumberFormat " + "ss:Format=\"0\"/>\r\n </Style>\r\n <Style " + "ss:ID=\"DateLiteral\">\r\n <NumberFormat " + "ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " + "</Styles>\r\n "; System.IO.StreamWriter excelDoc = null; excelDoc = new System.IO.StreamWriter(fileName); int sheetCount = 1; excelDoc.Write(startExcelXML); foreach (DataTable table in source.Tables) { int rowCount = 0; excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">"); excelDoc.Write("<Table>"); excelDoc.Write("<Row>"); for (int x = 0; x < table.Columns.Count; x++) { excelDoc.Write("<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">"); excelDoc.Write(table.Columns[x].ColumnName); excelDoc.Write("</Data></Cell>"); } excelDoc.Write("</Row>"); foreach (DataRow x in table.Rows) { rowCount++; //if the number of rows is > 64000 create a new page to continue output if (rowCount == 64000) { rowCount = 0; sheetCount++; excelDoc.Write("</Table>"); excelDoc.Write(" </Worksheet>"); excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">"); excelDoc.Write("<Table>"); } excelDoc.Write("<Row>"); //ID=" + rowCount + " for (int y = 0; y < table.Columns.Count; y++) { System.Type rowType; rowType = x[y].GetType(); switch (rowType.ToString()) { case "System.String": string XMLstring = x[y].ToString(); XMLstring = XMLstring.Trim(); XMLstring = XMLstring.Replace("&", "&"); XMLstring = XMLstring.Replace(">", ">"); XMLstring = XMLstring.Replace("<", "<"); excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + "<Data ss:Type=\"String\">"); excelDoc.Write(XMLstring); excelDoc.Write("</Data></Cell>"); break; case "System.DateTime": //Excel has a specific Date Format of YYYY-MM-DD followed by //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000 //The Following Code puts the date stored in XMLDate //to the format above DateTime XMLDate = (DateTime)x[y]; string XMLDatetoString = ""; //Excel Converted Date XMLDatetoString = XMLDate.Year.ToString() + "-" + (XMLDate.Month < 10 ? "0" + XMLDate.Month.ToString() : XMLDate.Month.ToString()) + "-" + (XMLDate.Day < 10 ? "0" + XMLDate.Day.ToString() : XMLDate.Day.ToString()) + "T" + (XMLDate.Hour < 10 ? "0" + XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) + ":" + (XMLDate.Minute < 10 ? "0" + XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) + ":" + (XMLDate.Second < 10 ? "0" + XMLDate.Second.ToString() : XMLDate.Second.ToString()) + ".000"; excelDoc.Write("<Cell ss:StyleID=\"DateLiteral\">" + "<Data ss:Type=\"DateTime\">"); excelDoc.Write(XMLDatetoString); excelDoc.Write("</Data></Cell>"); break; case "System.Boolean": excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + "<Data ss:Type=\"String\">"); excelDoc.Write(x[y].ToString()); excelDoc.Write("</Data></Cell>"); break; case "System.Int16": case "System.Int32": case "System.Int64": case "System.Byte": excelDoc.Write("<Cell ss:StyleID=\"Integer\">" + "<Data ss:Type=\"Number\">"); excelDoc.Write(x[y].ToString()); excelDoc.Write("</Data></Cell>"); break; case "System.Decimal": case "System.Double": excelDoc.Write("<Cell ss:StyleID=\"Decimal\">" + "<Data ss:Type=\"Number\">"); excelDoc.Write(x[y].ToString()); excelDoc.Write("</Data></Cell>"); break; case "System.DBNull": excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + "<Data ss:Type=\"String\">"); excelDoc.Write(""); excelDoc.Write("</Data></Cell>"); break; default: throw (new Exception(rowType.ToString() + " not handled.")); } } excelDoc.Write("</Row>"); } excelDoc.Write("</Table>"); excelDoc.Write(" </Worksheet>"); sheetCount++; } excelDoc.Write(endExcelXML); excelDoc.Close(); }

Community Wiki

저는 최근에 FlexCel.NET을 사용했고 그것이 훌륭한 라이브러리라는 것을 알게 되었습니다! 너무 많은 소프트웨어 제품에 대해 말하는 것이 아닙니다. 여기에 전체 판매 피치를 제공하는 것은 의미가 없습니다. 웹 사이트에서 모든 기능을 읽을 수 있습니다.

상용 제품이지만 구매하면 전체 소스를 얻을 수 있습니다. 따라서 정말로 원한다면 어셈블리로 컴파일할 수 있다고 생각합니다. 그렇지 않으면 구성이나 설치 또는 이와 유사한 것이 없이 xcopy에 대한 하나의 추가 어셈블리일 뿐입니다.

.NET 프레임워크에는 분명히 지원 기능이 내장되어 있지 않고 OLE 자동화는 고통스러운 세상이기 때문에 타사 라이브러리 없이는 이 작업을 수행할 수 있는 방법을 찾지 못할 것입니다.


Community Wiki

나는 XML 스프레드시트 생성에 동의합니다. 여기에 C# 3에 대해 수행하는 방법에 대한 예가 있습니다(모두 VB 9에서 이에 대해 블로그에 게시함) http://www.aaron-powell.com/linq-to-xml-to- 뛰어나다


Community Wiki

문제를 직접 해결하는 타사 솔루션에 대한 또 다른 참조를 추가하려는 경우: http://www.officewriter.com

(면책 조항: 저는 OfficeWriter를 만드는 회사인 SoftArtisans에서 일합니다)


Community Wiki

IKVM + POI

또는 Interop을 사용할 수 있습니다 ...


Community Wiki

다음은 샘플 코드로 완성된 LINQ to XML을 사용하여 수행하는 방법입니다.

LINQ to XML을 사용하여 신속하게 Excel 데이터 가져오기 및 내보내기

네임스페이스 등을 가져와야 하기 때문에 약간 복잡하지만 외부 종속성을 피할 수 있습니다.

(물론 C#이 아니라 VB .NET이지만 XML 리터럴을 사용하기 위해 자체 프로젝트에서 VB .NET 항목을 항상 분리하고 C#에서 다른 모든 작업을 수행할 수 있습니다.)


Community Wiki

Infragistics 또는 Syncfusion과 같은 일부 타사 구성 요소 공급업체는 Microsoft Excel을 설치할 필요가 없는 매우 우수한 Excel 내보내기 기능을 제공합니다.

이러한 공급업체는 고급 UI 그리드 구성 요소도 제공하므로 이러한 구성 요소는 Excel 내보내기의 스타일과 레이아웃이 응용 프로그램의 사용자 인터페이스에서 그리드의 현재 상태를 모방하도록 하려는 경우 특히 유용합니다.

내보낼 데이터에 중점을 두고 UI에 대한 링크 없이 내보내기를 서버 측에서 실행하려는 경우 무료 오픈 소스 옵션(예: ExcelLibrary) 중 하나를 선택합니다.

저는 이전에 Microsoft Office 제품군에서 서버 측 자동화를 사용하려는 프로젝트에 참여했습니다. 이 경험을 바탕으로 나는 그 접근 방식에 대해 강력히 권장합니다.


Community Wiki

public class GridViewExportUtil { public static void Export(string fileName, GridView gv) { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader( "content-disposition", string.Format("attachment; filename={0}", fileName)); HttpContext.Current.Response.ContentType = "application/ms-excel"; using (StringWriter sw = new StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { // Create a form to contain the grid Table table = new Table(); // add the header row to the table if (gv.HeaderRow != null) { GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); table.Rows.Add(gv.HeaderRow); } // add each of the data rows to the table foreach (GridViewRow row in gv.Rows) { GridViewExportUtil.PrepareControlForExport(row); table.Rows.Add(row); } // add the footer row to the table if (gv.FooterRow != null) { GridViewExportUtil.PrepareControlForExport(gv.FooterRow); table.Rows.Add(gv.FooterRow); } // render the table into the htmlwriter table.RenderControl(htw); // render the htmlwriter into the response HttpContext.Current.Response.Write(sw.ToString()); HttpContext.Current.Response.End(); } } } /// <summary> /// Replace any of the contained controls with literals /// </summary> /// <param name="control"></param> private static void PrepareControlForExport(Control control) { for (int i = 0; i < control.Controls.Count; i++) { Control current = control.Controls[i]; if (current is LinkButton) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); } else if (current is ImageButton) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); } else if (current is HyperLink) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); } else if (current is DropDownList) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); } else if (current is CheckBox) { control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); } if (current.HasControls()) { GridViewExportUtil.PrepareControlForExport(current); } } } }

안녕하세요 이 솔루션은 그리드 보기를 Excel 파일로 내보내는 것입니다.


Community Wiki

다음 라이브러리를 사용하여 멋진 형식의 Excel 파일을 만들 수 있습니다. http://officehelper.codeplex.com/documentation
아래 샘플을 참조하십시오.

 using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME)) { helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN; helper.CurrentSheetName = "Sheet1"; helper.CurrentPosition = new CellRef("C3"); //the template xlsx should contains the named range "header"; use the command "insert"/"name". helper.InsertRange("header"); //the template xlsx should contains the named range "sample1"; //inside this range you should have cells with these values: //<name> , <value> and <comment>, which will be replaced by the values from the getSample() CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); helper.InsertRange(sample1, getSample()); //you could use here other named ranges to insert new cells and call InsertRange as many times you want, //it will be copied one after another; //even you can change direction or the current cell/sheet before you insert //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it helper.DeleteSheet("Sheet3"); }

여기서 샘플은 다음과 같습니다.

 private IEnumerable<List<object>> getSample() { var random = new Random(); for (int loop = 0; loop < 3000; loop++) { yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop}; } }

Community Wiki

C#에서 Excel 파일을 만드는 가장 간단하고 빠른 방법은 Open XML 생산 도구를 사용하는 것입니다. Open XML 생산 도구는 Open XML SDK 설치와 함께 제공됩니다. 이 도구는 모든 Excel 파일을 C# 코드로 리버스 엔지니어링합니다. 그런 다음 C# 코드를 사용하여 해당 파일을 다시 생성할 수 있습니다.

관련된 프로세스의 개요는 다음과 같습니다.

  1. 도구를 사용하여 Open XML SDK를 설치합니다.
  2. 원하는 모양으로 최신 Excel 클라이언트를 사용하여 Excel 파일을 만듭니다. 이름을 DesiredLook.xlsx 지정합니다.
  3. 도구를 사용하여 DesiredLook.xlsx 열고 상단 근처에 있는 Reflect Code 버튼을 클릭합니다. 여기에 이미지 설명 입력
  4. 파일에 대한 C# 코드가 도구의 오른쪽 창에 생성됩니다. 이것을 C# 솔루션에 추가하고 원하는 모양으로 파일을 생성합니다.

보너스로 이 방법은 모든 Word 및 PowerPoint 파일에서 작동합니다. 그런 다음 C# 개발자는 필요에 맞게 코드를 변경합니다.

이 목적을 위해 Windows에서 실행될 github에서 간단한 WPF 앱을 개발했습니다. 생성된 코드를 붙여넣을 수 있는 GeneratedClass 라는 자리 표시자 클래스가 있습니다. 파일의 한 버전으로 돌아가면 다음과 같은 Excel 파일이 생성됩니다.

여기에 이미지 설명 입력


Community Wiki

실크를 사용해 본 적이 있습니까?

우리는 고전적인 asp에서 sylk로 엑셀시트를 생성하곤 했고 지금은 엑셀제너레이터도 찾고 있습니다.

sylk의 장점은 셀의 서식을 지정할 수 있다는 것입니다.


Community Wiki

Java 오픈 소스 솔루션은 Apache POI 입니다. 여기에 interop을 설정하는 방법이 있을 수 있지만 Java에 대해 이에 대해 충분히 알지 못합니다.

이 문제를 조사했을 때 Interop 어셈블리를 사용하게 되었습니다.


Community Wiki

출처 : http:www.stackoverflow.com/questions/151005/how-do-i-create-an-excel-xls-and-xlsx-file-in-c-sharp-without-installing-mic

반응형