如何使用C#创建Excel电子表格而不需要在运行代码的计算机上安装Excel?


当前回答

要将xls保存为xlsx格式,我们只需要从Microsoft.Office.Interop.Excel库调用SaveAs方法。该方法将采用大约16个参数,其中一个参数是文件格式。

Microsoft文档:此处另存为方法参数

我们需要传递的对象如下

wb.SaveAs(filename, 51, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, false, false, 1,1, true, 
System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value)

这里,51是XLSX的枚举值

对于不同文件格式的另存为,可以参考xlFileFormat

其他回答

您可以考虑使用XML Spreadsheet 2003格式创建文件。这是一种简单的XML格式,使用了一个文档化的模式。

前段时间,我在NPOI上创建了一个DLL。使用它非常简单:

IList<DummyPerson> dummyPeople = new List<DummyPerson>();
//Add data to dummyPeople...
IExportEngine engine = new ExcelExportEngine();
engine.AddData(dummyPeople); 
MemoryStream memory = engine.Export();

你可以在这里阅读更多。

顺便说一句,它是100%开源的。随时使用、编辑和共享;)

一个经常被忽略的简单选项是使用Microsoft Reporting创建.rdlc报告并将其导出为excel格式。您可以在visual studio中设计它,并使用以下方法生成文件:

localReport.Render("EXCELOPENXML", null, ((name, ext, encoding, mimeType, willSeek) => stream = new FileStream(name, FileMode.CreateNew)), out warnings);

您还可以分别使用“WORDOPENXML”和“pdf”将其导出为.doc或.pdf,并且它在许多不同的平台(如ASP.NET和SSRS)上都受支持。

在可视化设计器中进行更改要容易得多,在那里您可以看到结果,相信我,一旦开始分组数据、格式化组标题、添加新节,您就不想处理几十个XML节点。

您可以使用ExcelXmlWriter。

它工作得很好。

你可以试试我的SwiftExcel库。此库直接写入文件,因此非常高效。例如,您可以在几秒钟内写入100k行,而不占用任何内存。

下面是一个简单的用法示例:

using (var ew = new ExcelWriter("C:\\temp\\test.xlsx"))
{
    for (var row = 1; row <= 10; row++)
    {
        for (var col = 1; col <= 5; col++)
        {
            ew.Write($"row:{row}-col:{col}", col, row);
        }
    }
}