【问题标题】:EPPlus - Named Range is there but not workingEPPlus - 命名范围存在但不工作
【发布时间】:2016-06-04 02:34:41
【问题描述】:

类似于 EPPlus - Named Range is not populated
在他的例子中,他的范围在工作簿级别,但他正在查看工作表级别。 我的 EP 代码在工作簿级别显示 0 个范围,在工作表级别显示 15 个范围,这是应该的。 打开工作表。名称显示所有 15 个,并带有正确的名称。

检索一个范围,公式是正确的
“OFFSET(Sheet1!$A$33, 0, Sheet1!_CurrentMonth, 1, 55 -Sheet1!_CurrentMonth)”,但几乎所有其他内容都会在评估时返回异常。
它报告 1 列,这是不正确的。
使用“'Sheet1'!_Fund1Projected”,'FullAddress' 看起来是正确的,但 'FullAddressAbsolute' 给出了“$#REF!$-1”

最后,我使用模板 xltm 创建电子表格 xlsm。

        public static void CreateChart()
    {
        var excelFullPath = "C:\\Users\\username\\Documents\\Excel\\Templates\\";
        var excelFileName = "LowCashBalanceChart.xlsm";
        FileInfo newFile = new FileInfo(excelFullPath + excelFileName);
        if (newFile.Exists)
           newFile.Delete();
        FileInfo template = new FileInfo(excelFullPath + "Sample Chart.xltm");
        using (ExcelPackage xlPackage = new ExcelPackage(newFile, template))
        {
            ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets["Sheet1"]; //xlPackage.Workbook.Worksheets.FirstOrDefault(); 
            ExcelNamedRange namedRange;
            namedRange = xlPackage.Workbook.Names["_Fund1Projected"]; // fails, no ranges at the WB level
            namedRange = worksheet.Names["_Fund1Projected"]; // this one works               
            for (int rowIndex = namedRange.Start.Row; rowIndex <= namedRange.End.Row; rowIndex++)  // Exception on range.Start
            // 'namedRange.Start' threw an exception of type 'System.ArgumentOutOfRangeException'
            {
                for (int columnIndex = namedRange.Start.Column; columnIndex <= namedRange.End.Column; columnIndex++)
                {
                    worksheet.Cells[rowIndex, columnIndex].Value = (rowIndex * 100 + columnIndex).ToString();

                }
            }

            xlPackage.Save();
        }
    }

我查看了 GitHub 上的代码,但没有什么特别之处。
在工作簿级别尝试使用范围以及相同的结果。

【问题讨论】:

    标签: c# excel epplus


    【解决方案1】:

    我解决了我的问题,我会在这里为将来可能需要它的任何人提供答案。

    我为 3x3 正方形创建了一个范围。 Range1 = =Sheet1!$A$24:$C$26

    我可以写信。没有例外。

    但是当我们的范围的端点由其他单元格的值确定时,它会失败。

    =OFFSET(Sheet1!$A$32, 0, Sheet1!_CurrentMonth, 1, 55 -Sheet1!_CurrentMonth)

    问题在于我们的命名范围是动态的。 这就是为什么它会出现异常。

    解决方法是不使用 EPPlus 中的动态范围。 只需多一点 C# 代码来处理动态部分,而不是 Excel 为您处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多