EPPlus - 命名范围在那里但不起作用

时间:2016-06-01 22:29:09

标签: c# excel epplus

类似于 EPPlus - Named Range is not populated
在他的情况下,他的范围是在工作簿级别,但他正在查看工作表级别。 我的EP代码在工作簿级别显示0个范围,在工作表级别显示15个,应该如此。 打开工作表。名称显示所有15个,具有正确的名称。

检索范围,公式正确为
" OFFSET(Sheet1!$ A $ 33,0,Sheet1!_ CurrentMonth,1,55 -Sheet1!_CurrentMonth)",但几乎所有其他内容都会在评估时返回异常。
它报告1列,这是不正确的 并且' FullAddress'看起来是正确的"' Sheet1'!_ Fund1Projected",但是' 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上的代码,但没有什么突出的 尝试使用工作簿级别的范围以及相同的结果。

1 个答案:

答案 0 :(得分:0)

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

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

我可以写得很好。没有例外。

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

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

问题是我们的命名范围是动态的。 这就是它获得例外的原因。

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

相关问题