2011-03-07 48 views
2

在C#中我有一個DataTable有有效值,其中一些是指數格式。我此數據表導出到XLSX文件使用ExtremeML(我認爲是基於OpenXML的)和下面的代碼:ExtremeML負指數導出問題

if (!Directory.Exists(savePath.Text)) 
     Directory.CreateDirectory(savePath.Text); 

    using (var package = SpreadsheetDocumentWrapper.Create(savePath.Text + fileName + ".xlsx")) 
    { 
     for (int i = 0; i < dataset.Tables.Count; i++) 
     { 
      // declares worksheet 
      var part = package.WorkbookPart.WorksheetParts.Add(dataset.Tables[i].TableName.ToString()); // second worksheet filled by second collection 

      bool first = true; 
      int position = 0; 
      for (int row = 0; row < dataset.Tables[i].Rows.Count; row++) 
      { 
       for (int col = 0; col < dataset.Tables[i].Columns.Count; col++) 
       { 
        // adds to file 
        if (first) 
         part.Worksheet.SetCellValue(new GridReference(row, col), dataset.Tables[i].Columns[col].ColumnName.ToString()); 
        else 
         part.Worksheet.SetCellValue(new GridReference(row, col), dataset.Tables[i].Rows[position][col]); 
       } 
       if (first) 
       { 
        first = false; 
       } 
       else 
        position++; 
      } 
     } 
    } 

所得excel文件幾乎是可以接受的,所不同的是負指數負數 (例如 - 7.45E-05)將負號作爲一個數字(前面的例子變爲0.000-745)。這些列在DataTable中都設置爲雙精度,所以excel文件應該像這樣格式化它們。

有關這個問題的原因的任何想法? (另外,我知道代碼是一種痛苦的觸摸 - 代碼不是我的,並且我還沒有得到清理該程序。)

回答

2

您的示例代碼看起來很好。

這看起來像ExtremeML轉換雙打方式中的一個錯誤。正如你所說,它似乎只會影響負指數負數。

我目前正在調試它並創建其他單元測試來覆蓋這些場景,之後我會將更新的代碼提交給CodePlex並在此處發佈更新。

編輯:此錯誤現在已修復。您需要從CodePlex下載並構建ExtremeML源代碼,因爲運行時版本當前不是最新版本。

+0

謝謝,我欠你一個 – SeanVDH 2011-03-09 15:20:42