xv1t / opendocument-template
将多维数据渲染到报告中
This package is not auto-updated.
Last update: 2024-09-18 20:17:43 UTC
README
##快速生成 OpenDocument 报告 支持文件: ODS
、ODT
创建模板的推荐软件
- LibreOffice
- OpenOffice
您的报告文件已正确打开在
- LibreOffice
- OpenOffice
- MS Office >=2010
快速手动(ods)
- 创建模板 ods 文件
- 放置元素
- 标记范围
- 从数据库加载数据
- 通过模板文件将数据渲染到新的 ods 文件
- 在 LibreOffice Calc 或其他软件中打开并享受
需求
PHP 扩展
- zip
- xml
PHP 版本 >=5.3
推荐模板软件:LibreOffice 5
安装
将文件 OpenDocumentTemplate.php
放入您的项目,并使用它
<?php include_once "OpenDocumentTemplate.php"; //create object $template = new OpenDocumentTemplate();
第一个简单报告
准备您的数据
数据 - 是 PHP 中的数组。建议所有对象字段按对象名称分组。
<?php $data = array( 'Report' => array( 'name' => 'Test Report', 'date' => '2016-09-25', 'author' => 'Me' ) );
所有字段都分组在 Report
父数组中。这种命名方法提供了一种强大的多维数据技术。
设计模板文件
打开 LibreOffice Calc。创建新的电子表格;
为以下内容添加 3 个单元格
保存为 sample_report.ods
。
使用数据渲染模板
<?php $template->open('sample_report.ods', 'sample_report-out.ods', $data)
然后打开新文件 sample_report-out.ods
,您会在表格中看到
添加第二个维度
为对象列表添加键 Cities
<?php $data = array( 'Report' => array(/* main Report data */), 'Cities' => array( array(/* city data */), array(/* city data */), array(/* city data */), array(/* city data */), ) );
所有 Cities
对象必须具有相同字段的列表。在我们的例子中: name
、streets
、population
<?php //Sample of one City object array( 'City' => array( 'name' => 'Albatros', 'streets' => 165, 'population' => 1300000 ) );
和所有数据
$data = array( 'Report' => array( 'name' => 'Test Report', 'date' => '2016-09-25', 'author' => 'Me' ), 'Cities' => array( array( //first object 'City' => array( 'name' => 'Albatros', 'streets' => 165, 'population' => 1300000 ) ), array( //next object 'City' => array( 'name' => 'Turtuga', 'streets' => 132, 'population' => 750000 ) ), array( //next object 'City' => array( 'name' => 'Palmtown', 'streets' => 18, 'population' => 10000 ) ), ) );
添加其他对象作为线性维度
在兄弟键 Mayor
中添加每个城市的市长信息
<?php $data = array( 'Report' => array(/*...*/), 'Cities' => array( array( 'City' => array(/*...*/), 'Mayor' => array( 'name' => 'John Do', 'old' => 47 ), ), array( 'City' => array(/*...*/), 'Mayor' => array( 'name' => 'Mary Ann', 'old' => 32 ), ), array( 'City' => array(/*...*/), 'Mayor' => array( 'name' => 'Mike Tee', 'old' => 29 ), ), ) );
添加第三个维度
为每个城市中的广场列表添加键 Squares
<?php $data = array( 'Report' => array(/*...*/), 'Cities' => array( array( 'City' => array(/*...*/), 'Mayor' => array(/*...*/), 'Squares' => array( array(/*...*/), array(/*...*/), array(/*...*/), ) ), array( 'City' => array(/*...*/), 'Mayor' => array(/*...*/), 'Squares' => array( array(/*...*/), array(/*...*/), array(/*...*/), array(/*...*/), array(/*...*/), ) ), array( 'City' => array(/*...*/), 'Mayor' => array(/*...*/), 'Squares' => array( array(/*...*/), array(/*...*/), ) ), ) );
广场对象示例
<?php array( 'Sqaure' => array( 'name' => 'Trafalgaar', 'length' => 23, 'width' => 45 ) )
和数据 $data
的最终版本
<?php $data = array( //level1 'Report' => array( 'name' => 'Test Report', 'date' => '2016-09-25', 'author' => 'Me' ), 'Cities' => array( array( //level 2 'City' => array( 'name' => 'Albatros', 'streets' => 165, 'population' => 1300000 ) 'Mayor' => array( 'name' => 'John Do', 'old' => 47 ), 'Squares' => array( array( //level 3 'Sqaure' => array( 'name' => 'Trafalgaar', 'length' => 23, 'width' => 45 ) ), array( 'Sqaure' => array( 'name' => 'Square #2', 'length' => 23, 'width' => 45 ) ), array( 'Sqaure' => array( 'name' => 'Square #3', 'length' => 23, 'width' => 45 ) ), ) ), array( 'City' => array( 'name' => 'Turtuga', 'streets' => 132, 'population' => 750000 ) 'Mayor' => array( 'name' => 'Mary Ann', 'old' => 32 ), 'Squares' => array( array( 'Sqaure' => array( 'name' => 'Square #4', 'length' => 23, 'width' => 45 ) ), array( 'Sqaure' => array( 'name' => 'Square #5', 'length' => 23, 'width' => 45 ) ), ) ), array( 'City' => array( 'name' => 'Palmtown', 'streets' => 18, 'population' => 10000 ), 'Mayor' => array( 'name' => 'Mike Tee', 'old' => 29 ), 'Squares' => array( array( 'Sqaure' => array( 'name' => 'Square #6', 'length' => 23, 'width' => 45 ) ), array( 'Sqaure' => array( 'name' => 'Square #7', 'length' => 23, 'width' => 45 ) ), array( 'Sqaure' => array( 'name' => 'Square #8', 'length' => 23, 'width' => 45 ) ), ) ), ) );
设计电子表格
好吧,我们有一个 3 级维度的对象数组
在 LibreOffice Calc 中它们被称为 范围名称
。
插入 -> 名称 -> 管理