在 OpenXML 里的图表存放的日期时间很多存放的是数值,需要进行转换才能获取到用户可见的字符串
日期在 OpenXML 里可以使用数值存放,需要根据数值和格式化字符串转换为用户可见的字符串
如以下的 PPT 文件
存储的代码如下
本文将告诉大家如何从上面的数据转换为日期字符串
本文基于 dotnet OpenXML 解析 PPT 图表 面积图入门 的内容,替换了 PPT 文档。可以从本文最后获取到测试的文件和所有代码
在以上的测试的文档,类别的内容是日期,存储代码如上。在开始解析之前,需要了解 PPT 的图表的日期存放格式。这个存放格式有两套,分别是使用 1904 作为基础和使用 1900 作为基础的时间,和 Excel 存储日期相同,请看 Date systems in Excel
为了了解当前的图表采用的基础时间,先读取 ChartSpace 的 Date1904 属性,如以下代码
根据 ECMA 376 的第 21.2.2.38 章的描述,在 Date1904 属性设置为 true 时,将采用 1904 作为基础的日期。计算方法是使用 1904 或 1900 的前一天,分别是 1903.12.31 和 1899.12.31 作为计算。存放的数值表示的是加上当前的天数,计算到日期字符串,需要减去当天
在获取到 NumericValue 的值,如以下代码的 numericValueText
可以进行计算
以上的 format
是格式化字符串,格式化字符串可以用来告诉软件如何格式化日期等内容
在 NumberingCache 存在格式化字符串的定义,如不写将不进行格式化。在 NumberingCache 的每个 NumericPoint 也可以存放格式化字符串,给每个数值定义格式化字符串。如果 NumericPoint 没有定义,将继承使用 NumberingCache 的格式化字符串,如以下代码,获取类别的数值定义的格式化字符串
以上代码的 numericPointFormatCodeText
就是格式化字符串的内容
在 PPT 里,对于日期,如果格式化字符串是默认的字符串,将采用所运行的设备的语言文化进行格式化。例如在使用中文的设备上运行 PPT 软件,将使用 yyyy/M/d
作为默认的格式化
如在使用中文的设备,需要使用以下代码进行处理
将以上的代码组合,即可解析图表类别的日期内容
以上代码的 list 集合就存放了类别的内容
运行的效果如下
本文以上的测试文件和代码放在github 和 gitee 欢迎访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源
获取代码之后,进入 MainWindow.xaml.cs 文件,在这个文件里就是本文的例子代码
更多请看 Office 使用 OpenXML SDK 解析文档博客目录
原文链接: http://blog.lindexi.com/post/dotnet-OpenXML-%E8%A7%A3%E6%9E%90-PPT-%E5%9B%BE%E8%A1%A8-%E8%A7%A3%E6%9E%90%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4%E8%A1%A8%E7%A4%BA%E5%86%85%E5%AE%B9
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。