Làm cách nào tôi có thể tạo bảng tính Excel bằng C # mà không yêu cầu cài đặt Excel trên máy đang chạy mã?
Làm cách nào tôi có thể tạo bảng tính Excel bằng C # mà không yêu cầu cài đặt Excel trên máy đang chạy mã?
Câu trả lời:
Bạn có thể sử dụng một thư viện gọi là ExcelL Library. Đây là một thư viện mã nguồn mở miễn phí được đăng trên Google Code:
Đây có vẻ là một cổng của PHP ExcelWriter mà bạn đã đề cập ở trên. Nó sẽ không ghi vào định dạng .xlsx mới, nhưng họ đang làm việc để thêm chức năng đó vào.
Nó rất đơn giản, nhỏ và dễ sử dụng. Thêm vào đó, nó có DataSetHelper cho phép bạn sử dụng DataSets và DataTables để dễ dàng làm việc với dữ liệu Excel.
ExcelL Library dường như vẫn chỉ hoạt động đối với định dạng Excel cũ hơn (tệp .xls), nhưng có thể sẽ thêm hỗ trợ trong tương lai cho các định dạng 2007/2010 mới hơn.
Bạn cũng có thể sử dụng EPPlus , chỉ hoạt động cho các tệp định dạng Excel 2007/2010 (tệp .xlsx). Ngoài ra còn có NPOI hoạt động với cả hai.
Có một vài lỗi được biết đến với mỗi thư viện như được ghi chú trong các bình luận. Trong tất cả, EPPlus dường như là sự lựa chọn tốt nhất khi thời gian trôi qua. Nó dường như được tích cực cập nhật và tài liệu là tốt.
Ngoài ra, như ghi nhận của @ АртёмЦарионов dưới đây, EPPlus đã hỗ trợ cho Pivot Bàn ExcelLibrary thể có một số hỗ trợ ( vấn đề bảng Pivot trong ExcelLibrary )
Dưới đây là một vài liên kết để tham khảo nhanh:
ExcelL Library - GNU Lesser GPL
EPPlus - GNU Lesser General License (LGPL)
NPOI - Giấy phép Apache
Dưới đây là một số mã ví dụ cho ExcelL Library:
Dưới đây là một ví dụ lấy dữ liệu từ cơ sở dữ liệu và tạo sổ làm việc từ nó. Lưu ý rằng mã ExcelL Library là dòng duy nhất ở dưới cùng:
//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);
Tạo tệp Excel dễ dàng như vậy. Bạn cũng có thể tự tạo các tệp Excel, nhưng chức năng trên là điều thực sự gây ấn tượng với tôi.
Nếu bạn hài lòng với định dạng xlsx, hãy thử dự án GitHub của tôi, EPPlus . Nó bắt đầu với nguồn từ ExcelPackage, nhưng hôm nay nó được viết lại hoàn toàn. Nó hỗ trợ các phạm vi, kiểu dáng ô, biểu đồ, hình dạng, hình ảnh, phạm vi được đặt tên, Trình lọc tự động và rất nhiều thứ khác.
Và những gì về việc sử dụng Open XML SDK 2.0 cho Microsoft Office?
Một vài lợi ích:
Liên kết:
Tôi đã sử dụng thành công các dự án nguồn mở sau:
ExcelPackage cho các định dạng OOXML (Office 2007)
NPOI cho định dạng .XLS (Office 2003). NPOI 2.0 (Beta) cũng hỗ trợ XLSX.
Hãy xem bài viết trên blog của tôi:
Bạn có thể sử dụng OLEDB để tạo và thao tác các tệp Excel. Kiểm tra điều này: Đọc và viết Excel bằng OLEDB .
Ví dụ điển hình:
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();
}
EDIT - Một số liên kết khác:
Giải pháp thương mại, SpreadsheetGear cho .NET sẽ làm điều đó.
Bạn có thể xem các mẫu ASP.NET (C # và VB) trực tiếp tại đây và tải xuống phiên bản đánh giá tại đây .
Tuyên bố miễn trừ trách nhiệm: Tôi sở hữu Bảng tínhGear LLC
Một vài lựa chọn tôi đã sử dụng:
Nếu XLSX là bắt buộc: ExcelPackage là một khởi đầu tốt nhưng đã chết khi nhà phát triển bỏ công việc trên nó. ExML nhặt từ đó và thêm một vài tính năng. ExML không phải là một lựa chọn tồi, tôi vẫn đang sử dụng nó trong một vài trang web sản xuất.
Tuy nhiên, đối với tất cả các dự án mới của tôi, tôi đang sử dụng NPOI , cổng .NET của Apache POI . NPOI 2.0 (Alpha) cũng hỗ trợ XLSX.
Một tùy chọn cực kỳ nhẹ có thể là sử dụng các bảng HTML. Chỉ cần tạo các thẻ đầu, thân và bảng trong một tệp và lưu nó dưới dạng tệp có đuôi .xls. Có các thuộc tính cụ thể của Microsoft mà bạn có thể sử dụng để định kiểu đầu ra, bao gồm các công thức.
Tôi nhận ra rằng bạn có thể không mã hóa điều này trong một ứng dụng web, nhưng đây là một ví dụ về thành phần của tệp Excel thông qua bảng HTML. Kỹ thuật này có thể được sử dụng nếu bạn đang mã hóa ứng dụng bảng điều khiển, ứng dụng máy tính để bàn hoặc dịch vụ.
Nếu bạn đang tạo tệp Excel 2007/2010, hãy thử dự án nguồn mở này: https://github.com/closesxml/closesxml
Nó cung cấp một cách hướng đối tượng để thao tác các tệp (tương tự VBA) mà không phải đối phó với sự phức tạp của Tài liệu XML. Nó có thể được sử dụng bởi bất kỳ ngôn ngữ .NET nào như C # và Visual Basic (VB).
CloseXML cho phép bạn tạo các tệp Excel 2007/2010 mà không cần ứng dụng Excel. Ví dụ điển hình là tạo báo cáo Excel trên máy chủ web:
var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell("A1").Value = "Hello World!"; workbook.SaveAs("HelloWorld.xlsx");
Bạn có thể sử dụng ExcelXmlWriter .
Nó hoạt động tốt.
Bạn thực sự có thể muốn kiểm tra các lớp interop có sẵn trong C # (ví dụ: Microsoft.Office.Interop.Excel
Bạn nói không có OLE (điều này không phải), nhưng các lớp interop rất dễ sử dụng. Hãy xem Tài liệu C # tại đây (Interop cho Excel bắt đầu trang 1072 của C # PDF).
Bạn có thể bị ấn tượng nếu bạn chưa thử chúng.
Xin được cảnh báo về lập trường của Microsoft về vấn đề này:
Microsoft hiện không khuyến nghị và không hỗ trợ Tự động hóa các ứng dụng Microsoft Office từ bất kỳ ứng dụng hoặc thành phần máy khách không tương tác, không giám sát nào (bao gồm cả ASP, ASP.NET, DCOM và NT Services), vì Office có thể thể hiện hành vi không ổn định và / hoặc bế tắc khi Office được chạy trong môi trường này.
Dưới đây là một hoàn toàn miễn phí C # thư viện, cho phép bạn xuất khẩu từ một DataSet
, DataTable
hoặc List<>
vào một chính hãng Excel 2007 tập tin .xlsx, sử dụng các thư viện OpenXML:
http://mikeledgeledridease.com/pages/CSharp/ExportToExcel.htmlm
Mã nguồn đầy đủ được cung cấp - miễn phí - cùng với hướng dẫn và ứng dụng demo.
Sau khi thêm lớp này vào ứng dụng của bạn, bạn có thể xuất Bộ dữ liệu của mình sang Excel chỉ bằng một dòng mã:
CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");
Nó không đơn giản hơn thế nhiều ...
Và nó thậm chí không yêu cầu Excel phải có mặt trên máy chủ của bạn.
Bạn có thể xem xét việc tạo các tệp của mình bằng định dạng Bảng tính XML 2003 . Đây là một định dạng XML đơn giản sử dụng lược đồ được ghi chép tốt .
Bạn có thể muốn xem GemBox.S Lansheet .
Họ có một phiên bản miễn phí với tất cả các tính năng nhưng giới hạn ở 150 hàng trên mỗi tờ và 5 tờ cho mỗi sổ làm việc, nếu điều đó nằm trong nhu cầu của bạn.
Tôi chưa cần phải sử dụng nó, nhưng có vẻ thú vị.
Syncfusion Essential XlsIO có thể làm điều này. Nó không phụ thuộc vào văn phòng của Microsoft và cũng có hỗ trợ cụ thể cho các nền tảng khác nhau.
Mẫu mã:
//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);
Toàn bộ bộ điều khiển có sẵn miễn phí thông qua chương trình cấp phép cộng đồng nếu bạn đủ điều kiện (doanh thu dưới 1 triệu USD). Lưu ý: Tôi làm việc cho Syncfusion.
Tốt,
bạn cũng có thể sử dụng thư viện của bên thứ ba như Aspose .
Thư viện này có lợi ích là nó không yêu cầu cài đặt Excel trên máy của bạn, điều này sẽ rất lý tưởng trong trường hợp của bạn.
OpenXML cũng là một giải pháp thay thế tốt giúp tránh cài đặt MS Excel trên Máy chủ. Open XML SDK 2.0 do Microsoft cung cấp giúp đơn giản hóa công việc thao tác các gói Open XML và các thành phần lược đồ Open XML nằm bên trong một gói. Giao diện lập trình ứng dụng XML mở (API) gói gọn nhiều tác vụ phổ biến mà các nhà phát triển thực hiện trên các gói Open XML.
Hãy xem OpenXML: Giải pháp thay thế giúp tránh cài đặt MS Excel trên Máy chủ
Các thư viện XML Office 2003 khác nhau hoạt động khá tốt cho các tệp excel nhỏ hơn. Tuy nhiên, tôi thấy kích thước tuyệt đối của một sổ làm việc lớn được lưu ở định dạng XML là một vấn đề. Ví dụ: một sổ làm việc tôi làm việc với nó sẽ là 40 MB ở định dạng XLSX mới (và được đóng gói chặt chẽ hơn) trở thành tệp XML 360 MB.
Theo như nghiên cứu của tôi, có hai gói thương mại cho phép xuất ra các định dạng tệp nhị phân cũ hơn. Họ đang:
Tôi cũng không rẻ (lần lượt là 500USD và 800USD). nhưng cả hai đều hoạt động độc lập với chính Excel.
Điều tôi sẽ tò mò là mô-đun đầu ra Excel cho những người thích OpenOffice.org. Tôi tự hỏi nếu chúng có thể được chuyển từ Java sang .Net.
Tôi đồng ý về việc tạo Bảng tính XML, đây là một ví dụ về cách thực hiện cho C # 3 (mọi người chỉ viết blog về nó trong VB 9: P) http://www.aaron-powell.com/linq-to-xml-to- vượt trội
Gần đây tôi đã sử dụng FlexCel.NET và thấy nó là một thư viện tuyệt vời! Tôi không nói rằng về quá nhiều sản phẩm phần mềm. Không có điểm nào trong việc đưa ra toàn bộ doanh số bán hàng ở đây, bạn có thể đọc tất cả các tính năng trên trang web của họ.
Nó là một sản phẩm thương mại, nhưng bạn có được nguồn đầy đủ nếu bạn mua nó. Vì vậy, tôi cho rằng bạn có thể biên dịch nó vào hội đồng của bạn nếu bạn thực sự muốn. Mặt khác, nó chỉ là một lắp ráp bổ sung cho xcopy - không có cấu hình hoặc cài đặt hoặc bất cứ thứ gì tương tự.
Tôi không nghĩ rằng bạn sẽ tìm mọi cách để làm điều này mà không có thư viện của bên thứ ba như .NET framework, rõ ràng, không có sự hỗ trợ nào cho nó và OLE Automatic chỉ là cả một thế giới đau khổ.
Tôi đã viết một mã đơn giản để xuất dữ liệu sang excel mà không cần sử dụng đối tượng excel bằng cách sử dụng System.IO.StreamWriter.
Dưới đây là mã sẽ đọc tất cả các bảng từ tập dữ liệu và viết chúng vào từng tờ một. Tôi đã giúp đỡ từ bài viết này .
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();
}
Chỉ muốn thêm một tham chiếu khác vào giải pháp của bên thứ ba trực tiếp giải quyết vấn đề của bạn: http://www.officewriter.com
(Tuyên bố miễn trừ trách nhiệm: Tôi làm việc cho SoftArtisans, công ty sản xuất OfficeWriter)
Đây là một cách để làm điều đó với LINQ to XML, hoàn thành với mã mẫu:
Nhập và xuất nhanh dữ liệu Excel với LINQ sang XML
Nó hơi phức tạp, vì bạn phải nhập không gian tên và vv, nhưng nó cho phép bạn tránh mọi phụ thuộc bên ngoài.
(Tất nhiên, tất nhiên, đó là VB .NET, không phải C #, nhưng bạn luôn có thể cô lập các công cụ VB .NET trong dự án riêng của mình để sử dụng XML Literals và làm mọi thứ khác trong C #.)
Một số nhà cung cấp thành phần bên thứ 3 như Infragistic hoặc Syncfusion cung cấp khả năng xuất Excel rất tốt mà không yêu cầu Microsoft Excel phải được cài đặt.
Vì các nhà cung cấp này cũng cung cấp các thành phần lưới UI tiên tiến, các thành phần này đặc biệt tiện dụng nếu bạn muốn kiểu dáng và bố cục của xuất excel để mô phỏng trạng thái hiện tại của lưới trong giao diện người dùng của ứng dụng của bạn.
Nếu xuất của bạn dự định được thực hiện phía máy chủ, tập trung vào dữ liệu sẽ được xuất và không có liên kết đến giao diện người dùng, thì tôi sẽ chọn một trong các tùy chọn nguồn mở miễn phí (ví dụ: ExcelL Library).
Trước đây tôi đã tham gia vào các dự án đã cố gắng sử dụng tự động hóa phía máy chủ trên bộ Microsoft Office. Dựa trên kinh nghiệm này, tôi rất muốn giới thiệu cách tiếp cận đó.
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);
}
}
}
}
Xin chào giải pháp này là xuất chế độ xem lưới của bạn sang tệp excel của bạn, nó có thể giúp bạn thoát ra
Bạn có thể tạo các tệp Excel được định dạng độc đáo bằng thư viện này:
http://officehelper.codeplex.com/documentation
Xem mẫu dưới đây:
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");
}
nơi mẫu trông như thế này:
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};
}
}
Cách đơn giản nhất và nhanh nhất để tạo tệp Excel từ C # là sử dụng Công cụ năng suất XML mở. Công cụ năng suất XML mở đi kèm với cài đặt Open XML SDK. Công cụ đảo ngược các kỹ sư bất kỳ tệp Excel thành mã C #. Mã C # sau đó có thể được sử dụng để tạo lại tệp đó.
Tổng quan về quá trình liên quan là:
DesiredLook.xlsx
.DesiredLook.xlsx
và nhấp vào nút Reflect Code gần trên cùng.
Là một phần thưởng, phương pháp này hoạt động cho mọi tệp Word và PowerPoint. Là nhà phát triển C #, sau đó bạn sẽ thực hiện thay đổi mã để phù hợp với nhu cầu của bạn.
Tôi đã phát triển một ứng dụng WPF đơn giản trên github sẽ chạy trên Windows cho mục đích này. Có một lớp giữ chỗ được gọi là GeneratedClass
nơi bạn có thể dán mã được tạo. Nếu bạn quay lại một phiên bản của tệp, nó sẽ tạo một tệp excel như thế này:
Một số tự động hóa Excel hữu ích trong C #, bạn có thể tìm thấy từ liên kết sau.
http://csharp.net-informations.com/excel/csharp-excel-tutorial.htmlm
bolton.
Nhìn vào các mẫu làm thế nào để tạo các tệp Excel.
Có các ví dụ trong C # và VB.NET
Nó quản lý các tệp XSL XSLX và CSV Excel.
xls
hoặcxlsx
tệp là một trong số đó). Không có yêu cầu rằng có một chương trình trên máy tính của bạn có thể đọc được nó (giả sử, nhị phân).