在跨平台 C# .NET 应用程序中导出到 Excel 电子表格
Posted
技术标签:
【中文标题】在跨平台 C# .NET 应用程序中导出到 Excel 电子表格【英文标题】:Export to Excel spreadsheet in Cross Platform C# .NET app 【发布时间】:2021-03-26 15:39:53 【问题描述】:所以我正在编写一个可以在 Mac、Linux 和 Windows 上运行的跨平台应用程序。我需要一个可以导出到 .xlsx 的库,而无需在主机上安装 Excel。此外,我需要在电子表格中包含简单的公式。我是 .NET 的新手,所以我不知道该库应该与哪个版本的 .NET Core 兼容才能使应用程序具有跨平台功能。我听说过 ClosedXML,它看起来非常适合我正在尝试做的事情。但是在 NuGet 页面和他们的 GitHub 页面上绝对没有说明它是否与 .NET Core 或跨平台等兼容。请帮助!我以前写过整个程序,结果发现我用完全错误的工具编写了它。
【问题讨论】:
“任务 ABC 的最佳库是什么?”问题在“哪些问题真的不适合 *** 的问答模型”的列表中(因为 SO 不喜欢基于意见的问题)。准备好结束你的问题。单击帮助链接(页面右上角的(?)
),然后单击有关哪些类型的问题不适用于 SO 的链接。要尝试一些东西,请使用库编写一个极简程序(例如,创建一个空的、命名的电子表格)并查看它是否有效。在 Windows 上调试它,然后在其他平台上尝试。
看看this Article。这家伙在 .NET 核心的上下文中评估了几个库。可能还有一些支持编写excel文件。
@Flydog57 感谢您的提示!虽然我的问题是问是否有人对一个好的库有建议,但我也在巧妙地询问我找到的库是否在跨平台用例中起作用。如果有人能告诉我一种检查库是否跨平台兼容的可靠方法,那将是理想的!然后我就不必再创建这样的 SO 帖子了。必须有一种更好的方法,而不是简单地随机添加 Nuget 包,直到我偶然发现一个既跨平台又不依赖于 excel 的包。
@AdrAs 感谢您的文章!这很好,因为我已经进行了大量的谷歌搜索,但还没有找到文章中提到的一些库。我去看看。
【参考方案1】:
你可以试试我的SwiftExcel 库。除了它是跨平台的(如果你将它安装到你的 .NET Core 应用程序中),这个库也非常高效,因为它直接写入文件。例如,您可以在几秒钟内写入 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);
您还可以使用一些基本公式,例如 Count
、Max
、Sum
或 Average
。这是来自同一 GitHub
页面的示例:
using (var ew = new ExcelWriter("C:\\temp\\test.xlsx"))
for (var row = 1; row <= 20; row++)
ew.Write(row.ToString(), 1, row, DataType.Number);
ew.WriteFormula(FormulaType.Average, 1, 22, 1, 1, 20);
ew.WriteFormula(FormulaType.Count, 1, 23, 1, 1, 20);
ew.WriteFormula(FormulaType.Max, 1, 24, 1, 1, 20);
ew.WriteFormula(FormulaType.Sum, 1, 25, 1, 1, 20);
【讨论】:
【参考方案2】:当遇到这个问题时,我从一个简单的概念验证应用程序开始。在您的情况下,这将是:创建一个只有一个条目的 .xls 文件。有了这样一个简单的项目,很容易快速尝试几个库。
首先创建一个 .NET 核心项目,然后导入一个 nuget 包,看看它是否仍然可以编译。如果是这样,那太好了,试着让它在 android 而不是 windows 上运行。如果它仍然运行,那就太好了。现在您可以开始编写使用该库的第一行代码。只需尝试使用简单的条目创建一个 .xls。在windows,android上试试。如果可行,请测试该库是否具有您需要的所有功能。
如果所有这些都通过了,那么你就有了一些可能会起作用的东西。
分而治之,一步一个脚印。
【讨论】:
以上是关于在跨平台 C# .NET 应用程序中导出到 Excel 电子表格的主要内容,如果未能解决你的问题,请参考以下文章