我正在尝试使用PHP处理.ods文件。该文件基本上如下所示:
[empty cell] | title1 | title2 | title3 18.12.2012 | 2.5 | 9.4 | 0.1 19.12.2012 | 4.5 | 1.23| 0.2 20.12.2012 | 12.4 | 21.1| 0.8 21.12.2012 | 0.5 | 11.0| 0.6
我需要的是读取数字,获取行和列的总和,并根据我从此文件获得的信息生成.odt文件。 多个stackoverflow和其他线程表明OpenTBS真的足以满足这个目的,但我对模板引擎概念有点新意,对PHP本身有点新意,所以我已经阅读了几天的文档,这是我唯一的事情。似乎理解如何基于模板合并和生成文档。 但我可以从模板或我加载到OpenTBS的其他文件中读取数据并进行处理吗?我想如果我可以读取数据,我可以使用HTML模板将其输出到浏览器中。如果不是太麻烦,我真的希望看到一些代码示例,谢谢。 如果OpenTBS不能这样做,我应该用什么其他库来读取ODF(ODS)文件?
答案 0 :(得分:0)
尽管OpenTBS的路线图中有数据阅读器,但当前版本(1.9.5)无法提取电子表格的数据。但它可以检索电子表格的XML。
因此,您可以阅读检索包含数据的电子表格的XML,获取一段用于提取数据的代码,然后将数据与ODS模板合并。
// Initialize the TBS instance
$TBS = new clsTinyButStrong; // new instance of TBS
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN); // load the OpenTBS plugin
// Retrieve xml from the source file
$TBS->LoadTemplate('data_to_extract.ods');
$xml = $TBS->Source;
// your code saving the data from $xml into $data
// ...
// Merge the data with the template
$TBS->LoadTemplate('template.ods');
$TBS->MergeBlock('d', $data);
$TBS->Show(OPENTBS_FILE, 'result.ods');
要从XML中提取数据,您可以注意到单元格中的数值存储在单元格的 office:value 属性中。示例:
<table:table-cell office:value-type="float" office:value="2.4" calcext:value-type="float">
<text:p>2.4000</text:p>
</table:table-cell>
单元格中的日期值存储在单元格的 office:date-value 属性中。示例:
<table:table-cell office:value-type="date" office:date-value="2016-03-02" calcext:value-type="date">
<text:p>02/03/16</text:p>
</table:table-cell>