Excel电子表格的PHP类库:PHP_XLSXWriter(大数据量报表、后台运行、浏览器下载)

简介: Excel电子表格的PHP类库:PHP_XLSXWriter(大数据量报表、后台运行、浏览器下载)

PHP_XLSXWriter 是一个用于生成 Microsoft Excel 2007+ xlsx 文件的 PHP 库。XLSX 是一种用基于 XML 的开放式文件标准存储电子表格数据的格式,用于 Excel 2007 及更高版。PHP_XLSXWriter 库提供简单的 API,用于将 PHP 数组中的数据写入 XLSX 文件。它可以写入包含多个工作表(worksheet)和大量数据的文件,并使用自动适应处理大型数据量。


相对于其他 Excel 库,PHP_XLSXWriter 的优势主要有:


  1. 高性能 - PHP_XLSXWriter 采用 zipArchive 函数压缩数据文件,速度快且生成的文件比较小。
  2. 运行稳定 - PHP_XLSXWriter 不需要依赖其他库或插件即可运行,并且可移植性比其他库高。
  3. 代码简洁和易用 - PHP_XLSXWriter 的 API 简单,灵活性高,可读性和可维护性好。
  4. 支持大数据集 - PHP_XLSXWriter 能够处理大量数据,并且采用的自适应处理大数据量技术在处理大数据集时非常可靠。


一、PHP_XLSXWriter与PHPExcel的区别

PHP_XLSXWriter和PHPExcel都是用于操作Excel电子表格的PHP类库,它们的区别主要体现在以下几个方面:

  1. 速度和内存消耗

相比于PHPExcel,PHP_XLSXWriter在操作大量数据时速度更快,同时也更节省内存资源。

  1. 外部依赖

PHPExcel需要依赖于LibreOffice或OpenOffice等第三方库来实现对Excel文件的操作,而PHP_XLSXWriter则不需要外部依赖,可以直接生成OpenXML格式的电子表格文件。

  1. 功能和灵活性

PHPExcel的功能非常丰富,支持多种Excel格式的读写操作,同时也能够处理一些高级的Excel操作,比如公式计算等。相比之下,PHP_XLSXWriter虽然没有PHPExcel的功能那么强大,但它的设计更为灵活,能够方便地对数据进行处理和格式化。

  1. 开发者支持


PHPExcel自2018年起已宣布停止维护和支持,虽然仍然可以使用,但未来可能会遇到一些兼容性和安全性的问题。相比之下,PHP_XLSXWriter仍然在积极维护和开发,未来也会有更多的功能和性能上的提升。


综上所述,如果你对Excel文件的操作需要高度的灵活性和性能,可以选择PHP_XLSXWriter。如果你需要处理复杂的Excel文件以及使用高级的Excel操作,可以使用PHPExcel。但是,考虑到PHPExcel已经停止了开发和支持,建议使用新的类库,如PhpSpreadsheet。


二、PHP_XLSXWriter的使用

1.使用步骤

PHP_XLSXWriter是一个用于生成Microsoft Excel OpenXML格式电子表格(xlsx)的PHP类库。使用PHP_XLSXWriter库可以非常方便地生成Excel电子表格,并支持多种数据类型和Excel的各种格式化选项。下面是使用PHP_XLSXWriter的一些基本步骤:


  1. 下载并安装PHP_XLSXWriter类库:传送门。该类库可以在Github上进行下载,下载下来的文件可以放置在项目下的任意位置。
  2. 创建一个XLSXWriter实例。代码如下:
require_once 'path/to/XLSXWriter.php';
$writer = new XLSXWriter();
  1. 设置写入Excel电子表格的基本信息,如标题、工作表名称等。示例代码如下:
$writer->setTitle('My Excel Document');
$writer->setSubject('Document Subject');
$writer->setAuthor('Author Name');
$writer->setDescription('Document Description');
$writer->setKeywords('keywords, go, here');
$sheet_name = 'Sheet1';
$writer->writeSheetHeader($sheet_name, array('Column 1'=> 'string', 'Column 2'=> 'string', 'Column 3'=> 'string', 'Column 4'=> 'string', 'Column 5'=> 'string', 'Column 6'=> 'string'));


  1. 向Excel电子表格写入数据。示例代码如下:
$data = array(
       array('Value 1-1', 'Value 1-2', 'Value 1-3', 'Value 1-4', 'Value 1-5', 'Value 1-6'),
       array('Value 2-1', 'Value 2-2', 'Value 2-3', 'Value 2-4', 'Value 2-5', 'Value 2-6'),
       array('Value 3-1', 'Value 3-2', 'Value 3-3', 'Value 3-4', 'Value 3-5', 'Value 3-6'),
       array('Value 4-1', 'Value 4-2', 'Value 4-3', 'Value 4-4', 'Value 4-5', 'Value 4-6'),
       array('Value 5-1', 'Value 5-2', 'Value 5-3', 'Value 5-4', 'Value 5-5', 'Value 5-6'),
);
foreach($data as $row) {
       $writer->writeSheetRow($sheet_name, $row);
}


  1. 保存Excel电子表格。示例代码如下:
$filename = 'my_excel_file';
$writer->writeToFile($filename . '.xlsx');

以上是使用PHP_XLSXWriter库生成Excel文件的基本流程,你可以根据实际需求,调整各个步骤的代码,以达到你想要的效果。

2.后台下载


函数封装是将一系列相关的操作组合成一个函数并对外提供统一接口的做法。其主要好处如下:

  1. 提高代码复用性和可维护性

将一些常见的操作抽象成函数,以模块化的方式组织代码,有助于提高代码的复用性和可维护性,因为不同的代码区域可以共享相同的功能函数,而不必重复编写。

  1. 提高代码的可读性

通过函数名来描述函数功能,可以提高代码的可读性,使得代码更易于理解和维护。通过封装,可以使得代码模块化,便于理解和维护。

  1. 提高代码的封装性和安全性

封装可以隐藏内部细节,只公开必要的接口,提高了代码的封装性和安全性。封装还可以通过限制对内部数据的访问来保证数据的完整性,从而避免了数据被恶意篡改的危险。

  1. 简化代码实现和维护


通过封装一些常见的操作,可以大幅简化代码实现和维护的复杂度,降低出错的几率,并且能够让开发人员更集中地思考业务逻辑的实现。

总之,函数封装是一个有助于编写高效、可读、可维护、健壮和安全代码的好方法。

/*封装函数
$data,array,数据
$header,标头名称
*/
function makeExcel($data, $header)
{
    require_once "libs/xlsxwriter/xlsxwriter.class.php";
    //实例化
    $writer = new XLSXWriter();
    //文件属性
    $writer->setTitle('My Excel Document');
    $writer->setSubject('Document Subject');
    $writer->setAuthor('Author Name');
    $writer->setDescription('Document Description');
    $writer->setKeywords('keywords, go, here');
    $sheet_name = 'Sheet1';
    $writer->writeSheetHeader($sheet_name, $header);
    foreach ($data as $row) {
        $writer->writeSheetRow($sheet_name, $row);
    }
    $filename = md5(time()) . '.xlsx';
    $writer->writeToFile('upload/' . $filename);
}
//表头
$header = array('序号' => 'int', '姓名' => 'string', '性别' => 'string', '单位' => 'string', '职务' => 'string', '学历' => 'string');
//二维数组
$len = 10000;
$data = array();
for ($j = 0; $j < $len; $j++) {
    $data[$j] = array($j + 1, '姓名' . $j, '性别' . $j, '单位' . $j, '职务' . $j, '学历' . $j);
}
//生成表格
makeExcel($data, $header);


3.浏览器下载

你可以通过以下代码将 PHP_XLSXWriter 生成的 Excel 文件直接通过浏览器下载:

// 导入 PHP_XLSXWriter 库
require 'path/to/PHP_XLSXWriter.php';
// 创建 XLSXWriter 实例
$writer = new XLSXWriter();
// 添加数据到 Excel 文档
$data = array(
   array('姓名', '年龄', '城市'),
   array('张三', 28, '北京'),
   array('李四', 22, '上海'),
   array('王五', 31, '广州')
);
$writer->writeSheet($data);
// 定义下载的文件名
$filename = 'example.xlsx';
// 告诉浏览器输出的内容类型为 Excel
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// 告诉浏览器文件的大小和名称
header('Content-Disposition: attachment;filename="'. $filename .'"');
// 将 Excel 文件输出到浏览器
$writer->writeToStdOut();
exit();


在上面的例子中,我们首先创建了一个 XLSXWriter 实例,并添加了一些数据。然后,我们通过 PHP 的 header() 函数来告诉浏览器输出的内容类型是 Excel,并且指定了下载文件的名称。最后,我们输出 Excel 文件到浏览器,并通过 exit() 函数停止脚本的运行。


这样,当用户点击下载链接时,浏览器就会开始一个下载操作,将生成的 Excel 文件保存到本地磁盘。


4.封装函数

让函数同时支持后台运行和浏览器下载。

/*封装函数
* $data,array,数据;
* $header,array,标头名称;
* $export,输出方式0后台运行1浏览器下载;
*/
function makeExcel($data, $header, $export = 0)
{
    require_once "libs/xlsxwriter/xlsxwriter.class.php";
    //实例化
    $writer = new XLSXWriter();
    //文件属性
    $writer->setTitle('My Excel Document');
    $writer->setSubject('Document Subject');
    $writer->setAuthor('Author Name');
    $writer->setDescription('Document Description');
    $writer->setKeywords('keywords, go, here');
    $sheet_name = 'Sheet1';
    $writer->writeSheetHeader($sheet_name, $header);
    //文件名称
    $filename = md5(time()) . '.xlsx';
    //设置下载方式
    if ($export == 0) {
        foreach ($data as $row) {
            $writer->writeSheetRow($sheet_name, $row);
        }
        $writer->writeToFile('upload/' . $filename);
    } else {
        $writer->writeSheet($data);
        // 告诉浏览器输出的内容类型为 Excel
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        // 告诉浏览器文件的大小和名称
        header('Content-Disposition: attachment;filename="' . $filename . '"');
        // 将 Excel 文件输出到浏览器
        $writer->writeToStdOut();
        exit();
    }
}

@漏刻有时


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
3月前
|
SQL 存储 分布式计算
MaxCompute问题之下载数据如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
40 0
|
4月前
|
BI 索引 Python
python报表自动化系列 - 译码:与Excel单元格索引对应的十进制数坐标
python报表自动化系列 - 译码:与Excel单元格索引对应的十进制数坐标
17 1
|
3月前
|
存储 分布式计算 DataWorks
MaxCompute问题之下载资源如何解决
MaxCompute资源指的是在MaxCompute项目中使用的计算资源和存储资源;本合集旨在向用户展示如何高效管理MaxCompute资源,包括资源包管理、配额调整和性能优化等方面。
29 0
|
4月前
|
BI 索引 Python
python报表自动化系列 - Excel单元格(Cell)索引范围对应的所有单元格
python报表自动化系列 - Excel单元格(Cell)索引范围对应的所有单元格
26 0
|
1天前
|
数据采集 DataWorks 监控
DataWorks产品使用合集之在 DataWorks 中将本地数据导入至 Excel 电子表格中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
8 0
|
21天前
|
PHP
php下载MP4视频
php下载MP4视频
9 0