2016-06-01 3 views
0

Подобно EPPlus - Named Range is not populated
В случае его диапазоны были на уровне рабочей книги, но он смотрел на уровне рабочего листа. Мой код EP показывает количество 0 диапазонов на уровне рабочей книги и 15 на уровне листа, как и должно быть. Открытие рабочего листа. Имена показывают все 15, с именами.EPPlus - именованный диапазон есть, но не работает

Получить диапазон, а формула верна с
"OFFSET (Лист1! $ A $ 33, 0, Лист1! _CurrentMonth, 1, 55 -Sheet1! _CurrentMonth)", но почти все остальное возвращает исключение по оценке ,
В нем отображается 1 столбец, что неверно.
А 'FullAddress' выглядит правильно с "! 'Лист1' _ 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

Я решил свою проблему, я отвечу здесь всем, кому это может понадобиться в будущем.

Я создал диапазон для квадрата 3x3. Range1 = = Sheet1! $ A $ 24: $ C $ 26

Я могу писать на это просто отлично. Без исключений.

Но когда у нас есть диапазоны, которые имеют конечные точки, определяемые значениями других ячеек, он терпит неудачу.

= OFFSET (Лист1! $ A $ 32, 0, Лист1! _CurrentMonth, 1, 55 -Sheet1! _CurrentMonth)

Проблема заключается в том, что наши именованные диапазоны являются динамическими. Вот почему это стало исключением.

Обходной путь - не использовать динамические диапазоны от EPPlus. Просто немного больше кода C# для обработки динамической части вместо Excel, обрабатывающей ее для вас.

Смежные вопросы