PHPSpreadsheet

阙俊友
2023-12-01

因为最开始做 PHP 的时候都是用 PHPExcel 来导出 excel。后来一直没有继续在做 PHP。前段时间做的一个小 tool 需要实现excel 的导出。在使用 PHPExcel 的时候一直报错,好像是由于 PHP 版本的问题。懒得去弄 PHP 的版本,就查了一些资料,使用PHPSpreadsheet 实现了功能。其实具体用法和 PHPExcel 差不多,总结一下 PHPSpreadsheet 的用法。

首先要使用 Composer 工具加载 PHPSpreadsheet

安装 Composer

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

安装 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 命令

Composer 自动加载机制

require 'vendor/autoload.php';
	use Md5Crypt\Md5Crypt;

PhpSpreadsheet

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' );

 类似资料:

相关阅读

相关文章

相关问答