2017-02-06 28 views
0

私はClosedXMLを使用していくつかのデータを含むxlsxファイルを作成しています。 Excelシートにはデータが入ったテーブルがあります。テーブルの列(シートの列ではない)に、データ型を指定します。ClosedXMLを使用してテーブルの列にデータ型を追加する

  /* This datatable is created and populated somewhere else in my program*/ 
      Datatable dt = new Datatable(); 

      ws.Cell(t.Position.Row, t.Position.Column).InsertTable(dt);  

      IXLTables allTables = ws.Tables; 

      var table = allTables.ElementAt(i); 

      int j = 1; 
      /* The options object hold the excel datatypes for each column*/ 
      foreach (var c in option.Tables.ElementAt(i).Columns) 
      { 
       table.Column(j).DataType = c.Type; 
       j++; 
      } 

      i++; 

データ型は、これは私のプログラムでどのように機能するか、オプションのオブジェクトからのforeachループで発見され、追加された、おそらく重要ではありません。

問題は、テーブルの列にデータ型を追加するときに、テーブルのヘッダーが含まれていることです。ヘッダーが "Text"で、指定した値がNumberなのでエラーになります。誰もがテーブルのヘッダーラインを無視し、単に下の列にデータ型を追加する方法を知っていますか?

ありがとうございます。

答えて

0

データ型を設定すると、Excelで列単位で機能するため、ClosedXmlから同じデータ型を期待するのは理にかなっていません。あなたが見つけたので、それはしかし、そのように動作しません。私がやる方法は、ヘッダー以外の列全体を選択する範囲を定義することです。私はあなたのようにテーブルで作業していませんが、次のスニペットはあなたに指示を与える必要があります。

IXLWorksheet sheet = wb.Worksheets.Add("Sheet1"); 
sheet.Cell(1, 1).InsertTable(dt); 
foreach (var column in sheet.ColumnsUsed()) 
{ 
    string columnLetter = column.ColumnLetter(); 
    string rng = $"${columnLetter}2:columnLetter}sheet.RangeUsed().RowCount()}"; 
    sheet.Range(rng).DataType = some data type; 
} 
+0

返信いただきありがとうございます!私が手動で列見出しを削除し、下のすべての列見出しにデータ型を追加したのと同じようなことをやめました。 –

関連する問題