2014-12-03 52 views
0

我正在創建一個項目,以創建一個在MS Word 2010文檔中顯示時間的條形圖。主程序將這些時間存儲在一個List<TimeSpan>C#將TimeSpan轉換爲Excel中的Open XML

我使用Word中的「插入圖表」功能創建了一個示例Word文檔,並用不同時間製作了一個條形圖(每個小時約1小時,格式爲例如01:04 :04(使用此代碼作爲模板)

我看着在打開XML SDK 2.0生產力工具,發現它在反射碼生成如(對於上面的例子):

numericValue9.Text = "4.449074074074074E-2"; //01:04:04 

如果我想用我的List<TimeSpan>自動生成這個,我該如何將我的TimeSpans轉換爲這個小的nu優美的價值?那是TimeSpan.TotalDays

另外,查看Word文檔(右鍵單擊圖表並選擇編輯數據),我注意到「AM」被追加到我的TimeSpan的末尾。 excel是否將我的時間跨度轉換爲日期時間?

+0

而不是直接推時間跨度到Excel中,爲什麼不能一開始時間和結束時間?這樣你可以[讓Excel找到不同的格式,然後你喜歡](http://stackoverflow.com/a/7929360/2596334)。 – 2014-12-03 20:37:39

+0

列表數據來自單獨的數據庫,由單獨的項目生成。他們代表完成某些任務的平均時間,所以沒有開始/結束日期。這個excel/word文檔的目的是以圖形方式報告平均值。 – Alex 2014-12-03 20:39:58

+0

你總是可以制定一個任意的開始時間,然後添加你的對象的時間來獲得「結束時間」。 – 2014-12-03 20:41:21

回答

1

正如DJ KRAZE所說,這種情況發生的原因是由於單元格的格式。
Open XML假定爲DataType = CellValues.String,但如果它實際上不是字符串類型,它將返回一些看起來不正確的東西(「小數字」)。

糾正此問題的方法僅僅是將單元格格式化爲文本。 您可以通過使用像這樣的公式做到這一點:

// A1 being what ever cell your original data is in 
=TEXT(A1, "h:mm:ss") 

結果:

result

+0

謝謝......我不確定條形圖是否能正確顯示此公式。另外,真正的問題是,如何轉換c#時間範圍,例如1:04:04到那個數字0.0444907407407407,因爲我用c#代碼生成文檔。 – Alex 2014-12-03 21:11:33

+0

我明白你的意思了。謝謝。 – Alex 2014-12-03 21:16:56