2016-11-19 4 views
0

Ich verwende EPPlus und scheint nicht in der Lage zu sein, die ToArray <> Methode zu funktionieren. Ich versuche, ein Array von String-Variablen von Spaltenüberschriften in einem Arbeitsblatt zu ziehen.Probleme mit ExcelRange.ToArray <>() in EPPlus

Mein Code ...

public static string[] GetWshHeaders(string WbkNm) 
    { 
     using (ExcelPackage package = new ExcelPackage(new FileInfo(WbkNm))) 
     { 
      ExcelWorksheet wsData = package.Workbook.Worksheets.First(); 
      int noHdrs = wsData.Dimension.Columns; 
      ExcelRange hdrs = wsData.Cells[1, 1, 1, noHdrs]; 
      string[] wsHdrs = hdrs.ToArray<string>(); 
      return wsHdrs; 
     } 
    } 

Intellisense Flaggen der hdrs Variable in der Zeile string [] wsHdrs = hdrs.ToArray() ;. Die Nachricht lautet: 'ExcelRange' enthält keine Definition für 'ToArray' und die beste Erweiterungsmethode Überladung 'Enumerable.ToArray (IEnumerable)' benötigt einen Empfänger vom Typ 'IEnumerable'.

Ich habe mit einer beliebigen Anzahl von Variationen des obigen Codes herumgespielt, aber, würde ich diese Frage nicht posten, wenn ich die richtige Syntax getroffen hätte.

Jede Hilfe wäre willkommen!

Antwort

0

ExcelRange hat ExcelRangeBase als Basisklasse, die diese Liste deklariert wird:

public class ExcelRangeBase : ExcelAddress, IExcelCell, IDisposable, IEnumerable<ExcelRangeBase>, IEnumerator<ExcelRangeBase> 
{ 
.... 
} 

So versuchen Sie Linq zu verwenden, um eine implizite Umwandlung von IEnumerable<ExcelRangeBase> zu String[] zu tun, das wird nicht funktionieren. Sie müssen Select verwenden, um die Value Eigenschaften jedes Bereichsobjekts zu erhalten. Und da jede Value Eigenschaft vom Typ ist Object Sie müssen ihre anrufen ToString() Methode:

string[] wsHdrs = hdrs 
    .Select(erb => erb.Value.ToString()) 
    .ToArray(); 

Die oben finden Sie die Array von Strings erhalten Sie suchen, aber bedenken Sie, dass Sie Informationen verlieren werden, da Value können eine Mischung aus numerischen Typen und String sein. Kein Problem, wenn Sie nur daran interessiert sind, einfach nur ihren Inhalt zu drucken. Wenn Sie vorhaben, sie in irgendeiner Weise zu schreiben, um zu übertreffen, haben Sie alles als Zeichenfolge.

Verwandte Themen