在跨平台C#.NET应用程序中导出到Excel电子表格

在跨平台C#.NET应用程序中导出到Excel电子表格,c#,.net,excel,.net-core,nuget,C#,.net,Excel,.net Core,Nuget,因此,我正在编写一个跨平台的应用程序,将在Mac、Linux和Windows上运行。我需要一个可以导出到.xlsx的库,而不必在主机上安装Excel。此外,我还需要在电子表格中包含简单的公式。我是.NET的新手,所以我不知道为了使应用程序能够跨平台运行,库应该与哪个版本的.NET核心兼容。我听说过ClosedXML,它看起来非常适合我要做的事情。但绝对没有在NuGet页面或他们的GitHub页面上说明它是否与.NETCore或跨平台等兼容。请帮助!我以前写过完整的程序,结果却发现我用的工具完全错

因此,我正在编写一个跨平台的应用程序,将在Mac、Linux和Windows上运行。我需要一个可以导出到.xlsx的库,而不必在主机上安装Excel。此外,我还需要在电子表格中包含简单的公式。我是.NET的新手,所以我不知道为了使应用程序能够跨平台运行,库应该与哪个版本的.NET核心兼容。我听说过ClosedXML,它看起来非常适合我要做的事情。但绝对没有在NuGet页面或他们的GitHub页面上说明它是否与.NETCore或跨平台等兼容。请帮助!我以前写过完整的程序,结果却发现我用的工具完全错误。

面对这个问题,我从一个简单的概念验证应用程序开始。在您的情况下,这将是:创建一个只包含一个条目的.xls文件。有了这样一个简单的项目,很容易快速试用几个库

首先创建一个.NET核心项目,然后导入一个nuget包,看看它是否仍然可以编译。如果是的话,那太好了,试着让它在安卓系统而不是windows上运行。如果它仍然运行,那就太好了。现在,您可以开始编写使用库的第一行代码。只要试着用一个简单的条目创建一个.xls。在windows和android上试试。如果可行,请测试库是否具有所需的所有功能

如果所有这些都过去了,你就有了一些可能会起作用的东西

分而治之,总是循序渐进。

你可以试试我的图书馆。除此之外,它是跨平台的(如果您将其安装到.NET核心应用程序中),该库还非常高效,因为它直接写入文件。例如,您可以在几秒钟内写入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);
        }
    }
}

“什么是任务ABC的最佳库?”问题列在“什么问题真的不符合StackOverflow的问答模型”(因为SO不喜欢基于意见的问题)列表中。准备好结束你的问题。单击帮助链接(
(?)
,位于页面右上角),然后单击关于哪些问题不适用的链接。要尝试一些东西,请使用库编写一个极简程序(例如,创建一个空的、命名的电子表格),并查看它是否有效。在Windows上调试,然后在其他平台上尝试。请查看。这家伙在.NETCore的上下文中评估了几个库。可能还有一些软件支持编写excel文件。@Flydog57谢谢你的提示!虽然我的问题是问是否有人对一个好的库有什么建议,但我也在微妙地问我找到的库是否在跨平台用例中起作用。如果有人能告诉我一个可靠的方法来检查库是否是跨平台兼容的,那将是理想的!那我就再也不用写这样的帖子了。一定有比随机添加Nuget包更好的方法,直到我偶然发现一个跨平台且不依赖excel的包。@AdrAs感谢本文!这很好,因为我做了大量的谷歌搜索,但没有找到文章中提到的一些库。我去看看。
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);
}