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


当前回答

各种Office 2003 XML库适用于较小的excel文件。然而,我发现以XML格式保存的大型工作簿的大小是一个问题。例如,我使用的新XLSX格式的工作簿将是40MB(当然也更紧凑),它将变成360MB的XML文件。

就我的研究而言,有两个商业软件包允许输出到较旧的二进制文件格式。他们是:

宝石盒ComponentOne Excel

两者都不便宜(我认为分别为500美元和800美元)。但两者都独立于Excel本身。

我会好奇的是OpenOffice.org之类的Excel输出模块。我想知道它们是否可以从Java移植到.Net。

其他回答

如何在OneDrive上使用C#创建Excel(.xslx)文件而不安装Microsoft Office

Microsoft Graph API提供文件和Excel API,用于为企业和消费者帐户创建和修改存储在OneDrive中的Excel文件。Microsoft.Graph NuGet包提供了许多用于使用File和Excel API的接口。

{
  Name = "myExcelFile.xslx",
  File = new Microsoft.Graph.File()
};

// Create an empty file in the user's OneDrive.
var excelWorkbookDriveItem = await graphClient.Me.Drive.Root.Children.Request().AddAsync(excelWorkbook);

// Add the contents of a template Excel file.
DriveItem excelDriveItem;
using (Stream ms = ResourceHelper.GetResourceAsStream(ResourceHelper.ExcelTestResource))
{
    //Upload content to the file. ExcelTestResource is an empty template Excel file.
    //https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/item_uploadcontent
    excelDriveItem = await graphClient.Me.Drive.Items[excelWorkbookDriveItem.Id].Content.Request().PutAsync<DriveItem>(ms);
}

此时,您现在已经在用户(企业或消费者)或组的OneDrive中创建了一个Excel文件。现在,您可以使用Excel API对Excel文件进行更改,而无需使用Excel,也无需了解Excel XML格式。

使用Open XML SDK 2.0 for Microsoft Office怎么样?

一些好处:

不需要安装Office由Microsoft制作=像样的MSDN文档只有一个.Net dll可用于项目SDK附带了许多工具,如diff、验证器等

链接:

githubMSDN主登录“How Do I…”起始页blogsMSDN brian_jones发布SDKblogs.MSDN brian_jones描述SDK处理大型文件而不崩溃(与DOM方法不同)

你可以试试我的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);
        }
    }
}

我也投票支持GemBox.Spreadsheet。

非常快速且易于使用,网站上有大量示例。

以全新的执行速度完成了我的报告任务。

我找到了另一个没有太多依赖性的库:MiniExcel。

您可以使用DataTables作为电子表格创建数据集(表格的名称是电子表格的名称),并通过以下方式将其保存到.xlsx文件

using var stream = File.Create(filePath);
stream.SaveAs(dataSet);

or

MiniExcel.SaveAs(filePath, dataSet);

它还提供Excel文件的读取,并支持CSV文件的读取和写入。