有没有人有使用 NuGet 中的包 DocumentFormat.OpenXML.DotNet.Core 构建控制台应用程序 (C#) 的经验?

Does anyone have experience building a Console App (C#) using the package DocumentFormat.OpenXML.DotNet.Core from NuGet?

我已于 Visual Studio 2019 年在 C# 中成功启动控制台应用程序解决方案,并已从 NuGet 下载并安装包 DocumentFormat.OpenXML.DotNet.Core。由于 DocumentFormat.OpenXML 不支持 .NET Core,我不能使用它。我还成功地将包附加到解决方案,它出现在解决方案资源管理器中,没有任何警报。 (我过去对其他软件包使用的方法相同。)

这个包应该可以让我的解决方案访问 OpenXML 功能,但我无法让我的程序识别它。

我曾尝试为 DocumentFormat 插入一个 using 语句,但我收到一条错误消息,指出 using 语句不是必需的 - 然后它询问我是否缺少 using 语句或汇编程序引用。

我曾尝试将命名空间更改为 DocumentFormat,但随后我必须添加所有 类 和所有函数,在我看来是 entire包的用途。

这是代码(它是示例代码,只是为了让它正常工作):

using System;
using DocumentFormat;
using S = DocumentFormat.OpenXml.Spreadsheet.Sheets;
using E = DocumentFormat.OpenXml.OpenXmlElement;
using A = DocumentFormat.OpenXml.OpenXmlAttribute;

namespace ConsoleApp1
{
    class Program
    {
        static void ReadExcelFile()
        {
            try
            {
                //Lets open the existing excel file and read through its content . Open the excel using openxml sdk
                using (SpreadsheetDocument doc = SpreadsheetDocument.Open("testdata.xlsx", false))
                {
                    //create the object for workbook part  
                    WorkbookPart workbookPart = doc.WorkbookPart;
                    Sheets thesheetcollection = workbookPart.Workbook.GetFirstChild<Sheets>();
                    StringBuilder excelResult = new StringBuilder();

                    //using for each loop to get the sheet from the sheetcollection  
                    foreach (Sheet thesheet in thesheetcollection)
                    {
                        excelResult.AppendLine("Excel Sheet Name : " + thesheet.Name);
                        excelResult.AppendLine("----------------------------------------------- ");
                        //statement to get the worksheet object by using the sheet id  
                        Worksheet theWorksheet = ((WorksheetPart)workbookPart.GetPartById(thesheet.Id)).Worksheet;

                        SheetData thesheetdata = (SheetData)theWorksheet.GetFirstChild<SheetData>();
                        foreach (Row thecurrentrow in thesheetdata)
                        {
                            foreach (Cell thecurrentcell in thecurrentrow)
                            {
                                //statement to take the integer value  
                                string currentcellvalue = string.Empty;
                                if (thecurrentcell.DataType != null)
                                {
                                    if (thecurrentcell.DataType == CellValues.SharedString)
                                    {
                                        int id;
                                        if (Int32.TryParse(thecurrentcell.InnerText, out id))
                                        {
                                            SharedStringItem item = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(id);
                                            if (item.Text != null)
                                            {
                                                //code to take the string value  
                                                excelResult.Append(item.Text.Text + " ");
                                            }
                                            else if (item.InnerText != null)
                                            {
                                                currentcellvalue = item.InnerText;
                                            }
                                            else if (item.InnerXml != null)
                                            {
                                                currentcellvalue = item.InnerXml;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    excelResult.Append(Convert.ToInt16(thecurrentcell.InnerText) + " ");
                                }
                            }
                            excelResult.AppendLine();
                        }
                        excelResult.Append("");
                        Console.WriteLine(excelResult.ToString());
                        Console.ReadLine();
                    }
                }
            }
            catch (Exception)
            {

            }
        }
    }
}

我刷新了礼包, 我已经启动了一个新的解决方案并在代码 window 中输入任何内容之前将包添加到其中 我已尝试在 NuGet 包管理器控制台和管理解决方案的 NuGet 包中更新和重新安装 window。

有人可以告诉我我缺少什么吗?

提前致谢,

DJ

不确定您是如何确定 DocumentFormat.OpenXml NuGet package "does not play with .NET Core". As a contributor to the Open XML SDK, I can confirm that it definitely does play with .NET Core and you can clone my CodeSnippets GitHub 存储库中提供的 Open XML SDK 来自行测试的。该存储库包含一个包含多个项目的解决方案,其中一些项目使用 .NET Core(例如,以 netstandard2.0 为目标的 CodeSnippets 库和以 netcoreapp3.0 为目标的 CodeSnippets.Tests 库)。

您使用的 DocumentFormat.OpenXml.DotNet.Core NuGet 包最后一次更新是在 2016 年 7 月 30 日,即差不多四年前。你真的应该用官方 DocumentFormat.OpenXml NuGet 包替换它。