2016-06-01 10 views
0

ähnlich EPPlus - Named Range is not populated
In seinem Fall waren seine Bereiche in der Arbeitsmappe Ebene, aber er war auf der Arbeitsblatt Ebene suchen. Mein EP-Code zeigt eine Anzahl von 0 Bereichen auf der Arbeitsbuch-Ebene und 15 auf der Blatt-Ebene, wie es sein sollte. Öffnen der Arbeitsblatt.Namen zeigt alle 15, mit Eigennamen.EPPlus - benannten Bereich ist es aber nicht funktioniert

Rufen Sie einen Bereich, und die Formel korrekt mit
"OFFSET (Sheet1! $ 33 A $, 0, Sheet1! _CurrentMonth, 1, 55 -Sheet1! _CurrentMonth)", aber fast alles gibt sonst eine Ausnahme für die Bewertung .
Es meldet 1 Spalte, die falsch ist.
Und die 'FullAddress' sieht richtig mit "! 'Sheet1' _ Fund1Projected", sondern 'FullAddressAbsolute' gibt "$ # REF $ - 1"

Schließlich verwende ich eine Vorlage, xltm, eine zu schaffen Tabellenkalkulation, 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(); 
     } 
    } 

Ich schaute auf den Code auf GitHub, aber nichts sticht heraus.
Versucht es mit den Bereichen auf der Arbeitsmappenebene mit den gleichen Ergebnissen.

Antwort

0

Ich löste mein Problem, ich werde Antwort für jeden, der es in Zukunft brauchen könnte.

Ich habe einen Bereich für ein 3x3 Quadrat erstellt. Range1 = = Sheet1! $ A $ 24: $ C $ 26

Ich kann dazu gut schreiben. Keine Ausnahmen.

Aber wenn wir Bereiche haben, deren Endpunkte durch Werte anderer Zellen bestimmt sind, schlägt es fehl.

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

Das Problem ist, dass unsere benannte Bereiche dynamisch sind. Deshalb bekam es eine Ausnahme.

Die Problemumgehung besteht darin, keine dynamischen Bereiche von EPPlus zu verwenden. Nur ein wenig mehr C# -Code, um den dynamischen Teil zu handhaben, anstatt ihn für Sie zu bearbeiten.

Verwandte Themen