可重用的类,用于生成 Excel 文件






4.92/5 (10投票s)
一个生成 Excel 文件 XML 字符串的类。
引言
到目前为止,我还没有遇到任何开发人员,在他的/她的职业生涯中的某个时刻,不需要在 Excel 文件中导出或显示数据。网上有很多不同的方法来实现这一点的例子,包括 Code Project。不幸的是,我从来没有见过任何关于可以在不同场景中重用的类。
幸运的是,从 Excel 2003 开始,我们可以创建一个具有特定格式的 XML 文件,它将作为 Excel 文件打开。 有几种方法可以创建 XML 文档,您可以使用 System.Xml
命名空间、连接 string
或使用字符串构建器(我不推荐它,但这是可能的),但是,现在您可以使用 LINQ to XML,创建 XML 变得非常容易,几乎不再有趣。
代码的局限性
就像我说的,这适用于 Excel 2003 及更高版本,所以,如果您的 Office 仍然是 XP,那么您就不走运了。
此外,此代码仅限于 Excel 的限制。 也就是说,它不能处理超过 256 列或 65,000 行。
使用代码
这只是一个名为 XmlExcelHelper
的类,其中包含所有用于向新文件添加工作表、行、单元格甚至 string
样式的方法。 您需要 System.Xml
、System.Xml.Linq
和 System.Core
命名空间才能使其工作。
几乎每个方法,包括类的构造函数,都有几个重载,我将演示如何使用其中的一些,您可以尝试其余的。 该类已完全文档化,我认为非常简单。 解释 Excel 需要的 XML 节点超出了本文的范围。
XmlExcelHelper
的构造函数调用一个名为 CreateExcelHeader
的 private
方法。 此方法添加使创建的文件成为 Excel 文件的 XML 结构,我要感谢 Ming_Lu,他的文章位于 这里,为我提供了创建此类所需的一切。
这是一个小例子,说明我们如何使用这个类将数据输入到 XML 中并创建一个漂亮的 Excel 表格。 我正在创建一个虚拟的 DataTable
,但您可以使用自定义对象、Dataset
或任何需要保存为 Excel 文件的数据。
private const string TABLE_HEADER_FORMAT_NAME = "greyBackground";
private const string SMALL_FONT_FORMAT = "smallFont";
private static DataTable CreateDataTable()
{
DataTable companies = new DataTable("Companies");
DataColumn column;
column = new DataColumn("CompanyName");
companies.Columns.Add(column);
column = new DataColumn("CompanyCountry");
companies.Columns.Add(column);
column = new DataColumn("YearSales");
companies.Columns.Add(column);
column = new DataColumn("GrossProfit");
companies.Columns.Add(column);
column = new DataColumn("CreationDate");
companies.Columns.Add(column);
companies.Rows.Add("Mexican Tequila", "Mexico", "10875600",
"4975200", "03/24/1995 2:35:00PM");
companies.Rows.Add("Canadian Food", "Canada", "308450870",
"103476200", "08/12/1983");
companies.Rows.Add("French Wines", "France", "285309567",
"81650000", "11/21/1990 17:40:00");
companies.Rows.Add("German Beer", "Germany", "285309567",
"81650000", "11/21/1990 17:40:00");
companies.Rows.Add("Russian Vodka", "Russia", "285309567",
"81650000", "11/21/1990 17:40:00");
companies.Rows.Add("Spanish Paella", "Spain",
"285309567", "81650000", "11/21/1990 17:40:00");
companies.Rows.Add("Argentinian Beef", "Argentina",
"285309567", "81650000", "11/21/1990 17:40:00");
companies.Rows.Add("Italian Pasta", "Italy",
"285309567", "81650000", "11/21/1990 17:40:00");
return companies;
}
public static void CreateReport()
{
DataTable table = CreateDataTable();
XmlExcelHelper helper = new XmlExcelHelper
(@"c:\MyExcelTest.xml", "Times New Roman", 11);
helper.AddStringStyle(TABLE_HEADER_FORMAT_NAME,
"Arial", 10, "#FFFFFF", "#C0C0C0", false);
helper.AddStringStyle(SMALL_FONT_FORMAT, "Arial", 8, "#000000", false);
helper.CreateSheet("International Foods");
helper.AddRow();
helper.AddCell(XmlExcelHelper.CellType.String, "Report Generated with LINQ to XML");
helper.AddRow();
helper.AddCell(XmlExcelHelper.CellType.String,
SMALL_FONT_FORMAT, "Report generated on " + DateTime.Now.ToLongDateString());
helper.AddRow();
foreach (DataColumn column in table.Columns)
{
helper.AddCell(XmlExcelHelper.CellType.String,
TABLE_HEADER_FORMAT_NAME, column.ColumnName);
}
foreach (DataRow row in table.Rows)
{
helper.AddRow();
helper.AddCell(XmlExcelHelper.CellType.String, row[0].ToString());
helper.AddCell(XmlExcelHelper.CellType.String, row[1].ToString());
helper.AddCell(XmlExcelHelper.CellType.Number,
XmlExcelHelper.DefaultStyles.Decimal, row[2].ToString());
helper.AddCell(XmlExcelHelper.CellType.Number,
XmlExcelHelper.DefaultStyles.Decimal, row[3].ToString());
helper.AddCell(XmlExcelHelper.CellType.String, row[4].ToString());
}
helper.SaveDocument();
}
正如您所看到的,该类有一个 SaveDocument
方法可以将 XML 文件保存到磁盘。 它还具有一个 ExcelFileXml
属性,该属性保存 XML string
,因此,如果您需要从 Web 应用程序在网页中显示 Excel 文件,则需要执行类似以下操作:
Response.Clear();
Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
Response.AppendHeader("Content-disposition", "attachment; filename=" + helper.FileName);
Response.Write(helper.ExcelFileXml);
Response.Flush();
Response.End();
关注点
当然,这个类只是创建 Excel 文件的一种功能性方法。 它有很多功能,您可以添加多个工作表,为 string
添加不同的样式,合并多个单元格,但它可以做更多的事情。 如果您特别需要什么,您只需在 Excel 中执行您想要的操作,将其保存为 XML 并打开它以查看 XML 的外观,您可以将其添加到该类。
希望你会觉得这很有用。 玩得开心。