首先,我的代码在控制台应用程序中运行。我通过 NuGet 将 OpenXML 安装到解决方案中。 我创建了一个新的解决方案,即 .NET dll 库,并以相同的方式安装了 openXML,并使用 OpenXML dll 部署了 dll,当调用我的 dll 时,出现如下错误。
安装的OpenXML是3.0.2
VerificationException:方法 DocumentFormat.OpenXml.Packaging.OpenXmlPartContainer.AddNewPart:类型参数“DocumentFormat.OpenXml.Packaging.WorksheetPart”违反了类型参数“T”的约束。
我已经注释掉了大部分代码,试图隔离发生这种情况的位置,我想我已经找到了它。有趣的是,当它确实抛出错误时,它甚至不会进入例程 CreateExcel()。但是当我注释掉某一行代码时,它会单步执行。这是我的基本结构。
我的主要日常。
internal static void CreateRawMtlExcel(List<RawMtl> Mtls, string OutputPath)
{
//SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(string.Format(@"{0}\{1}MexRawMtls.xlsx", OutputPath), SpreadsheetDocumentType.Workbook);
using (SpreadsheetDocument package = SpreadsheetDocument.Create(OutputPath, SpreadsheetDocumentType.Workbook))
{
CreateExcel(package, Mtls);
}
}
private static void CreateExcel(SpreadsheetDocument document, List<RawMtl> Mtls)
{
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); //This seems to be the line that is causing issues.
SheetData sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);
//Columns hColumns = GetHeaderColumns();
//Sheets sheets = document.WorkbookPart.Workbook.
// AppendChild<Sheets>(new Sheets());
//// Append a new worksheet and associate it with the workbook.
//Sheet sheet = new Sheet()
//{
// Id = document.WorkbookPart.
// GetIdOfPart(worksheetPart),
// SheetId = 1,
// Name = "Raw Materials"
//};
//sheets.Append(sheet);
//var sheetdata = worksheetPart.Worksheet.GetFirstChild<SheetData>();
////worksheetPart.Worksheet.InsertBefore(hColumns, sheetdata);
////WorkbookStylesPart workbookStylesPart1 = workbookPart.AddNewPart<WorkbookStylesPart>("rId3");
////GenerateWorkbookStylesContent(workbookStylesPart1);
workbookPart.Workbook.Save();
}
我找到了答案。所以首先我通过创建一个单独的控制台应用程序并引用 dll 来测试它,它起作用了。所以问题是如何称呼它。我正在第三方程序中调用我的 dll,该程序已经有 OpenXML 引用,并且它是旧版本。 2.12.1 当我降级时,一切正常。