类似于
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上的代码,但没有什么突出的 尝试使用工作簿级别的范围以及相同的结果。
答案 0 :(得分:0)
我解决了我的问题,我会在这里为那些可能需要它的人提供答案。
我创建了一个3x3平方的范围。 Range1 = = Sheet1!$ A $ 24:$ C $ 26
我可以写得很好。没有例外。
但是当我们的端点具有由其他单元格的值确定的端点时,它会失败。
= OFFSET(Sheet1!$ A $ 32,0,Sheet1!_CurrentMonth,1,55 -Sheet1!_CurrentMonth)
问题是我们的命名范围是动态的。 这就是它获得例外的原因。
解决方法是不使用EPPlus的动态范围。 只需多一点C#代码来处理动态部分而不是Excel为你处理它。