因为最开始做 PHP 的时候都是用 PHPExcel 来导出 excel。后来一直没有继续在做 PHP。前段时间做的一个小 tool 需要实现excel 的导出。在使用 PHPExcel 的时候一直报错,好像是由于 PHP 版本的问题。懒得去弄 PHP 的版本,就查了一些资料,使用PHPSpreadsheet 实现了功能。其实具体用法和 PHPExcel 差不多,总结一下 PHPSpreadsheet 的用法。
首先要使用 Composer 工具加载 PHPSpreadsheet
Composer 是PHP的一个依赖管理工具,我们可以在项目声明所依赖的外部工具库,Composer 会帮助安装这些依赖的库文件
Composer 是基于指定的项目的某个目录中进行安装的,一般会安装在php的路径下。例如 c:/xampp/php
windows 平台:
1. 下载地址:<b>https://getcomposer.org/download/</b>
2. 需要在 php.ini 开启 openssl 设置
3. 安装时需要选择 php.exe
4. 安装成功 输入 composer --version 查看
Linux 平台:
1.使用下面命令来安装
# php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
# php composer-setup.php
2.设置全局调用 & 切换为国内镜像
# mv composer.phar /usr/local/bin/composer
# composer config -g repo.packagist composer https://packagist.phpcomposer.com
3.更新 composer
# composer selfupdate
安装 composer 后会在 php 目录中生成一个 composer.json 文件,文件描述了项目的依赖关系
{
"require": {
"monolog/monolog": "1.2.*"
}
}
1. 使用 composer install 安装依赖包
2. require 命令
除了使用 install 命令外,也可以使用 require 命令快速的安装一个依赖而不需要手动在 composer.json 里添加依赖信息:<b>composer require monolog/monolog</b>
3. update 命令**********
update 命令用于更新项目里所有的包,或者指定的包
<b>composer update</b> 或者 <b>composer update monolog/monolog symfony/dependency-injection</b>
4. remove 命令
remove 命令用于移除一个包及其依赖
5. search 命令
6. show 命令
require 'vendor/autoload.php';
use Md5Crypt\Md5Crypt;
1. PHP 导出 Excel 的第三方插件,可以使用 composer 下载
composer require phpoffice/phpspreadsheet
2. 单个 sheet 创建
<?php
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Welcome to Helloweba.');
$writer = new Xlsx($spreadsheet);
$writer->save('hello.xlsx');
创建多个 sheet
$spreadsheet->setActiveSheetIndex(0)->setCellValue('A1', 'Keywords');
$spreadsheet->setActiveSheetIndex(0)->setCellValue('B1', 'Description');
$spreadsheet->getActiveSheet()->setTitle('Sheet One');
$spreadsheet->createSheet();
$spreadsheet->setActiveSheetIndex($key)->setCellValue('A1', "URL");
$spreadsheet->setActiveSheetIndex($key)->setCellValue('B1', "BU");
$spreadsheet->getActiveSheet()->setTitle('Sheet Two');
//设置当前 sheet
$spreadsheet->setActiveSheetIndex(0);
生成并保存
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$fileName = 'download/exportExcel_'.date('Y-m-d').'.xls';
$writer->save('../'.$fileName);
实现EXCEL文件下载
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
header('Content-Type:application/vnd.ms-excel');
header('Content-Disposition:attachment;filename="xxxxx.xls"');
header('Cache-Control:max-age=0');
$writer->save('php://output');
当 js 通过 ajax 将数据h传给 PHP 进行处理并希望通话PHP实现 Excel 下载是无法实现的,只能利用 PHP 将文档保存在服务器上,然后返回 url 给js ,通过 js 实现下载
window.open(urlDownload + JSON.parse(result).url,'_blank' );