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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 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();
    }
}

@漏刻有时


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
4月前
|
机器学习/深度学习 分布式计算 算法
Spark快速大数据分析PDF下载读书分享推荐
《Spark快速大数据分析》适合初学者,聚焦Spark实用技巧,同时深入核心概念。作者团队来自Databricks,书中详述Spark 3.0新特性,结合机器学习展示大数据分析。Spark是大数据分析的首选工具,本书助你驾驭这一利器。[PDF下载链接][1]。 ![Spark Book Cover][2] [1]: https://zhangfeidezhu.com/?p=345 [2]: https://i-blog.csdnimg.cn/direct/6b851489ad1944548602766ea9d62136.png#pic_center
173 1
Spark快速大数据分析PDF下载读书分享推荐
|
1月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
53 0
|
1月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
69 0
|
3月前
|
XML 缓存 JSON
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
261 0
|
18天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
58 8
|
21天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
25 4
|
19天前
|
分布式计算 大数据 BI
ClickHouse与大数据生态整合:从ETL到BI报表
【10月更文挑战第27天】在这个数据驱动的时代,企业越来越依赖于数据来做出关键决策。而高效的数据处理和分析能力则是支撑这一需求的基础。作为一位数据工程师,我有幸参与到一个项目中,该项目旨在利用ClickHouse与Hadoop、Spark、Flink等大数据处理框架的整合,构建一个从数据提取(Extract)、转换(Transform)、加载(Load)到最终生成商业智能(BI)报表的全流程解决方案。以下是我在这个项目中的经验和思考。
33 1
|
26天前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
305 5