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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*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的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
7天前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
9天前
|
人工智能 自然语言处理 数据可视化
别再用Excel死磕了!阿里云QBI+DataV才是政企报表的正确打开方式
阿里云Quick BI与DataV联合打造数据智能解决方案,覆盖数据分析、可视化及数字孪生全链路。QBI以智能分析驱动决策,DataV提供低代码可视化与三维孪生能力,助力政企高效实现数据驱动创新。
|
7月前
|
分布式计算 大数据 数据处理
从Excel到大数据:别让工具限制你的思维!
从Excel到大数据:别让工具限制你的思维!
288 85
|
9月前
|
PHP 计算机视觉 UED
Buzz库:PHP图像处理中的异步图像下载和保存
Buzz库:PHP图像处理中的异步图像下载和保存
|
10月前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
321 6
|
10月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
696 8
|
10月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
760 4
|
10月前
|
分布式计算 大数据 BI
ClickHouse与大数据生态整合:从ETL到BI报表
【10月更文挑战第27天】在这个数据驱动的时代,企业越来越依赖于数据来做出关键决策。而高效的数据处理和分析能力则是支撑这一需求的基础。作为一位数据工程师,我有幸参与到一个项目中,该项目旨在利用ClickHouse与Hadoop、Spark、Flink等大数据处理框架的整合,构建一个从数据提取(Extract)、转换(Transform)、加载(Load)到最终生成商业智能(BI)报表的全流程解决方案。以下是我在这个项目中的经验和思考。
442 1
|
11月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。