2017-08-11 1 views
0

数字を数字として扱う以外は、コードは正常に動作します。 ifステートメントは私がデバッグするときにdouble値をキャッチします。しかし、私はExcelに文字列以外のデータ型で書くことはできません。より正確にする必要がある場合、Excelのセルは正しいが、数値ではありません。C#でOpen XML SDKを使用してDataTableをExcelにエクスポートする際のデータ型を保存する

foreach (System.Data.DataRow dsrow in table.Rows) 
{ 
    DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row(); 
    foreach (String col in columns) 
    { 
     DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell(); 

     if (dsrow[col].GetType() == typeof(Double)) 
     { 
      cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.Number; 

     } 
     else 
     { 
      cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String; 
     } 

     cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); // 

     newRow.AppendChild(cell); 
    } 

    sheetData.AppendChild(newRow); 
} 
+0

の可能性のある重複した[OfficeオープンXML SDKの書き込み番号をシートに](https://stackoverflow.com/questions/16607063/office-open-xml -sdk-writing-numbers-to-sheet) – Kyra

+0

数字の場合に重複として報告した質問の答えに見られるように、まず値を入れてからデータ型を変更します。それ以外の場合は、 'ToString'メソッド – Kyra

答えて

0

私は同じ問題を抱えています。 小数点記号としてカンマを含むロケールを使用している場合に問題が発生するようです。 XMLでは、それはアメリカ形式でなければなりません。だから、ToStringメソッドでCutureInfoが私のために働い指定

var dataRow = new Row(); 
var cell = new Cell(); 
cell.CellValue = new CellValue(1.234.ToString(new CultureInfo("en-US"))); 
cell.DataType = CellValues.Number; 
dataRow.AppendChild(cell); 
sheetData.AppendChild(dataRow); 
関連する問題