禅道二次开发(四):集成PhpSpreadsheet解析Excel文件

PhpSpreadsheet是一个PHP表格文件处理库,可用来读写excel文件,本文介绍如何在禅道中引入PhpSpreadsheet库,可以使用它来解析Excel文件,比如上传excel格式的测试用例、导出测试用例为excel格式等。

安装PhpSpreadsheet

当前最新的PhpSpreadsheet要求PHP 7.4及以上版本。

由于禅道安装在centos7中,这里介绍如何在centos7中安装PhpSpreadsheet,另外顺便也记录一下在windows系统中安装phpspreadsheet的步骤。

linux安装

这里介绍centos7中如何安装PhpSpreadsheet到禅道目录下。

1. 安装composer

需要使用composer进行安装PhpSpreadsheet,先安装一下composer工具。

安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载composer
$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 2.2.7) successfully installed to: /root/composer.phar
Use it: php composer.phar

# 将composer.phar文件移动到bin目录以便全局使用composer命令
$ mv composer.phar /usr/local/bin/composer

# 切换国内源
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

2. 卸载低版本PHP

卸载原来的低版本PHP:

1
2
3
4
5
6
7
8
9
10
11
12
$ rpm -qa|grep php
php-cli-5.4.16-48.el7.x86_64
php-common-5.4.16-48.el7.x86_64
php-5.4.16-48.el7.x86_64
$ rpm -e php-cli-5.4.16-48.el7.x86_64
错误:依赖检测失败:
php-cli(x86-64) = 5.4.16-48.el7 被 (已安裝) php-5.4.16-48.el7.x86_64 需要
$ rpm -e php-5.4.16-48.el7.x86_64
警告:/etc/httpd/conf.d/php.conf 已另存为 /etc/httpd/conf.d/php.conf.rpmsave
$ rpm -e php-cli-5.4.16-48.el7.x86_64
$ rpm -e php-common-5.4.16-48.el7.x86_64

将禅道的PHP 加入环境变量:

1
2
3
4
5
6
vi /etc/profile

export PATH="$PATH:/opt/zbox/bin/"

source /etc/profile

3. 安装phpspreadsheet

进入禅道目录安装phpspreadsheet:

1
2
3
4
$ cd /opt/zbox/app/zentao/lib
$ mkdir excel
$ cd excel
$ composer require phpoffice/phpspreadsheet

会自动安装到vendor目录下:

1
2
3
4
5
$ pwd
/opt/zbox/app/zentao/lib/excel/vendor
$ ls
autoload.php composer ezyang maennchen markbaker myclabs phpoffice psr symfony

windows安装

我使用的是XAMPP软件包配置的PHP环境,和linux中一样,先安装PHP依赖管理工具composer。

1. 安装composer

下载phar文件 composer.pharhttps://getcomposer.org/download/,复制到D:\tools\xampp\php\pear 目录下,创建 composer.bat 文件,编写代码:

1
@php %~dp0composer.phar %*

然后将 D:\tools\xampp\php\pear 目录添加到环境变量。

打开cmd窗口,执行 composer -V 查看是否安装成功:

1
2
$ composer -V
Composer version 2.3.3 2022-04-01 22:15:35

也可以下载 Composer-Setup.exe 文件进行安装。

2. 安装phpspreadsheet

进入 D:\tools\xampp\php\pear 目录下,执行:

1
composer require phpoffice/phpspreadsheet

如果报如下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
Installation failed, deleting ./composer.json.

In RequireCommand.php line 210:

No composer.json present in the current directory (./composer.json), this may be the cause of the following excepti
on.


In PackageDiscoveryTrait.php line 308:

Package phpoffice/phpspreadsheet has requirements incompatible with your PHP version, PHP extensions and Composer v
ersion:
- phpoffice/phpspreadsheet 1.22.0 requires ext-gd * but it is not present.

修改 D:\tools\xampp\php\php.ini 文件,取消 extension=gdextension=fileinfo 的注释。

安装完成后执行 composer info 可看到安装的 phpoffice/phpspreadsheet 包。

禅道集成PhpSpreadsheet

PhpSpreadsheet安装到禅道目录后就可以使用它来处理excel文件了,先在module目录下创建模块excel,然后在/module/excel 创建文件model.php,编写读取Excel文件方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
require '/opt/zbox/app/zentao/lib/excel/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Reader\Xls;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;

class excelModel extends model
{
/**
* Parse Excel.
*
* @param string $fileName
* @access public
* @return void
*/
public function readexcel($fileName) {

// $reader = new Xlsx();
// $spreadsheet = $reader->load($fileName);
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($fileName);

// $datas = $spreadsheet->getActiveSheet()->toArray();
$worksheet = $spreadsheet->getActiveSheet();
$worksheetArray = $worksheet->toArray();

}
}

PhpSpreadsheet的更多使用方法可参考官方文档:https://phpspreadsheet.readthedocs.io/en/latest/

安装PHPExcel

简单介绍一下PHPExcel库的安装方法,和PhpSpreadsheet安装类似。

composer安装

1
composer require phpoffice/phpexcel

禅道引用:

1
2
3
4
5
6
7
<?php
require "/opt/zbox/app/zentao/lib/phpexcel/vendor/phpoffice/phpexcel/Classes/PHPExcel.php";

$reader= PHPExcel_IOFactory::createReaderForFile($fileName);
$spreadsheet = $reader->load($fileName);
$worksheet = $spreadsheet->getSheetByName(工作表名称);
$data = $worksheet->toArray();
--THE END--

起风了,要努力活下去吗,不,无须如此。——堀辰雄《起风了》


本文标题:禅道二次开发(四):集成PhpSpreadsheet解析Excel文件

文章作者:hiyo

文章链接:https://hiyongz.github.io/posts/zentao-extension-for-phpspreadsheet/

许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。

关注微信公众号,及时接收最新技术文章!