使用OpenTBS PHP在浏览器中读取和打印ODS文件

时间:2016-02-24 21:00:03

标签: php opentbs

我正在尝试使用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)文件?

1 个答案:

答案 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>