我们在“example.xlsx”中发现了一些内容的问题——使用了 ClosedXML 库

问题描述

我正在使用 ClosedXML 库生成一个包含 2 个工作表的简单 Excel 文件

每当我尝试打开文件时,我总是收到错误消息说 “我们发现“example.xlsx”中的某些内容存在问题。您是否希望我们尝试尽可能多地恢复。如果您信任此工作簿的来源,请单击“是”

如果我单击是,它会按预期显示数据,但我看不到任何数据 它的问题。此外,如果我只生成 1 个工作表,则此错误会 没有出现。

这是我的存储过程返回的内容,第一个结果集填充在 sheet1 中,第二个结果集填充在 sheet2 中,这按预期工作。 Workbook data

这是我正在使用的方法,它返回 2 个结果集并将两个结果集填充到 2 个不同的工作表中:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult POAReport(POAReportVM model)
    {
        POAReportVM poaReportVM = reportService.GetPOAReport(model);

        using (var workbook = new XLWorkbook())
        {
            IXLWorksheet worksheet1 = workbook.Worksheets.Add("ProductOrderAccuracy");
            worksheet1.Cell("A1").Value = "DATE";
            worksheet1.Cell("B1").Value = "ORDER";
            worksheet1.Cell("C1").Value = "";

            var countsheet1 = 2;
            for (int i = 0; i < poaReportVM.productOrderAccuracyList.Count; i++)
            {
                worksheet1.Cell(countsheet1,1).Value = poaReportVM.productOrderAccuracyList[i].CompletedDate.ToString();
                worksheet1.Cell(countsheet1,2).Value = poaReportVM.productOrderAccuracyList[i].WebOrderID.ToString();
                worksheet1.Cell(countsheet1,3).Value = poaReportVM.productOrderAccuracyList[i].Completedindicator;

                countsheet1++;
            }


            IXLWorksheet worksheet2 = workbook.Worksheets.Add("Summary");

            worksheet2.Cell("A1").Value = "Total Orders Sampled";
            worksheet2.Cell("B1").Value = "Passed";
            worksheet2.Cell("C1").Value = "% Passed";


            worksheet2.Cell(2,1).Value = poaReportVM.summaryVM.TotalOrdeRSSampled.ToString();
            worksheet2.Cell(2,2).Value = poaReportVM.summaryVM.Passed.ToString();
            worksheet2.Cell(2,3).Value = poaReportVM.summaryVM.PassedPercentage.ToString();

            //save file to memory stream and return it as byte array
            using (var ms = new MemoryStream())
            {
                workbook.SaveAs(ms);
                ms.Position = 0;
                var content = ms.ToArray();

                return File(content,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            }
        }
    }

解决方法

我遇到了类似的问题。对我来说,原因是mentioned in this answer

我在使用 EPPlus 自定义现有模板时遇到了这个问题。对我来说,问题出在模板本身,因为它包含对查找表的无效引用。我在公式 -> 名称管理器中找到了这个。

您可以在那里找到其他解决方案。

抱歉,我的声誉太低,无法添加评论。