【问题标题】:Reading and printing out an ODS file in browser using OpenTBS PHP使用 OpenTBS PHP 在浏览器中读取和打印 ODS 文件
【发布时间】:2016-02-24 21:00:02
【问题描述】:

我正在尝试使用 PHP 处理 .ods 文件。该文件基本上如下所示:

[空单元格] |标题1 |标题2 |标题3 2012 年 12 月 18 日 | 2.5 | 9.4 | 0.1 19.12.2012 | 4.5 | 1.23| 0.2 2012 年 12 月 20 日 | 12.4 | 21.1| 0.8 21.12.2012 | 0.5 | 11.0| 0.6

我需要的是读取数字,获取行和列的总和,并根据我从该文件中获得的信息生成 .odt 文件。 多个stackoverflow和其他线程表明OpenTBS对于这个目的来说真的足够了,但我对模板引擎概念有点陌生,对PHP本身有点陌生,所以我已经阅读了几天的文档,我唯一的事情似乎理解的是如何基于模板合并和生成文档。 但是我可以从加载到 OpenTBS 的模板或其他文件中读取数据并进行处理吗?例如,我想如果我可以读取数据,我可以使用 HTML 模板将其输出到浏览器中。如果这不是太麻烦,我真的很想看到一些这样做的代码示例,谢谢。 如果 OpenTBS 不能做到这一点,我应该使用什么其他库来读取 ODF(ODS) 文件?

【问题讨论】:

    标签: php opentbs


    【解决方案1】:

    尽管数据读取器在 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>
    

    【讨论】:

    • 好的,我明白了。是否有任何关于 OpenTBS 何时能够进行提取的信息?
    • 抱歉多次评论,只是错过了编辑我之前评论的机会。我知道如何自己进行提取,但似乎我在阅读我的 .ods 文件时可能会遇到某种问题。我使用了 LoadTemplate 方法,当我尝试回显结果字符串时,它打印出一些乱码,就像编码错误的情况一样。是否可以正确回显字符串?我尝试使用 'OPENTBS_ALREADY_XML' 和 'UTF8' 之一,与
       相呼应,但没有成功。
    • 内部 XML 内容不应该在 HTML 页面中可读。只需让您的浏览器显示页面的源代码,您就会得到 XML。
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2010-11-28
    • 1970-01-01
    • 2017-01-01
    • 2016-11-22
    相关资源
    最近更新 更多