2014-01-29 85 views
1

請參考鏈接,我使用來從數據表格Excel文件中的代碼來生成excel文件。我能夠成功生成excel文件。微軟開放SDK 2.0中使用C#

但問題/挑戰/問題如下。

  1. 我要生成具體根據數據類型列,所以如果列值包含日期它細胞格式應該日期(DD/MM/YYY)如果號碼然後數字。答等等...
  2. 我試圖生成excel文件按照數據格式,你可以看到特定的方法來生成單元格的值。但問題是,當用戶下載文件時,會發出警告信息「Excel發現無法讀取的內容'文件名'。是否要恢復此工作簿的內容?」。我不希望這個警告信息應該來。
  3. 如果我寫一切文字無需格式然後文件沒有任何警告信息,並下載文件後,如果用戶試圖在日期或數字格式來格式化相應的列將打開,隨後也將不允許用戶格式化/片&骰子數據在excel文件中。

參考: - http://www.codeproject.com/Articles/263106/Export-Tabular-Data-in-CSV-and-Excel-Formats-Throu

請讓我知道解決辦法,如果任何人有。

我使用DocumentFormat.OpenXml.dll

 private Cell CreateTextCell(string header, UInt32 index, string text) 
     { 
      var cell = new Cell {DataType = CellValues.InlineString, CellReference = header + index}; 
      var istring = new InlineString(); 
      var t = new Text {Text = text}; 
      istring.Append(t); 
      cell.Append(istring); 

      return cell; 
     } 

     private Cell CreateDateCell(string header, UInt32 index, DateTime sDate) 
     { 
      Cell cell = new Cell(); 

      cell.DataType = CellValues.Date; 
      cell.CellReference = header + index; 
      cell.StyleIndex = UInt32Value.FromUInt32(14); 
      cell.CellValue = new CellValue { Text = sDate.ToOADate().ToString() }; 
      return cell; 
     } 


     private Cell CreateNumberCell(string header, UInt32 index, string text) 
     { 
      Cell cell = new Cell(); 

      cell.DataType = CellValues.Number; 
      cell.CellReference = header + index; 

      cell.CellValue = new CellValue(text); 

      return cell; 
     } 
+0

作爲一個建議:使用類似EPPLUS。它很好地隱藏了Open XMl SDK的底層管道。 我既工作,不能說我多麼愛EPPLUS;) –

+0

是免費的工具? – pm86

+0

是的,即使許可證對開發人員來說也是非常好的。 –

回答

0

我已經搬到EPPlus .NET庫生成Excel文件,它是非常容易使用。

謝謝。

0

我可能沒有完整的解決方案,但你可以試試下面的步驟來找到問題的根源:

  1. 其中一個原因無法讀取內容錯誤(有許多原因,但考慮到你只是從數據表中寫入)。如果StyleIndex/Datatype/Cellvalue格式不匹配
  2. 要確定根本原因,您可以嘗試: 創建示例excel並直接寫入單元格(僅單元格)數字,它沒有問題,請逐一嘗試下一個數據類型。 接下來嘗試一個接一個地寫下它們。 做到這一點,並排除導致問題的類型。

接下來嘗試改變該類型的StyleIndex/cellFormat(您可以在線檢查示例),直到格式沒有錯誤。一旦你對所有類型都很滿意,你可以嘗試寫入整個excel。 如果你想使用OpenXML嘗試新的東西,你也可以使用這種方法(因爲你沒有記錄在線的所有例子)

識別問題的另一種方法是使用Openxml生產力工具,並驗證文件。