2016-11-19 27 views
0

に私がEPPlusを使用していますし、仕事をするのToArray <>メソッドを取得することができていないようです。私は、ワークシートの列見出しの文字列変数の配列を引き出すしようとしています。トラブル)EPPlus

マイコード...

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; 
     } 
    } 

インテリセンスフラグ行の文字列にHDRS変数[] wsHdrs = hdrs.ToArray();.メッセージがある:「ExcelRangeは「てToArray」と最良拡張メソッドのオーバーロード「Enumerable.ToArray(IEnumerableを)」の定義が含まれていないタイプの受信機のIEnumerableを 'を必要とします。

私は上記のコードの任意の数のバリエーションで遊んでいますが、正しい構文に当たっていれば、私はこの質問を投稿しません。

助けていただけたら幸いです!

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

だから、あなたは動作しませんどのIEnumerable<ExcelRangeBase>からString[]への暗黙的なキャストを行うためのLINQを使用しようとしている。

答えて

0

ExcelRangeがリストこの宣言されている基本クラスとしてExcelRangeBaseを持っています。 Selectを使用して、各範囲オブジェクトのプロパティーを取得する必要があります(Value)。各Valueプロパティは、そのToString()メソッドを呼び出す必要がありますObject型であるためと:あなたが探している文字列の配列を取得しますが、以来、あなたは情報を失うされていることに留意してくださいます

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

上記Valueすることができます数値型と文字列を混在させてください。単純にコンテンツを印刷するだけに興味があるとしたら、問題はありません。あなたが何らかの方法でそれらを書いて、優れたものにするつもりなら、あなたは全てを文字列として持つでしょう。