2014-12-03 36 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