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

news2024/11/8 18:30:02

Excel电子表格的PHP类库:PHP_XLSXWriter

  • 一、PHP_XLSXWriter与PHPExcel的区别
  • 二、PHP_XLSXWriter的使用
    • 1.使用步骤
    • 2.后台下载
    • 3.浏览器下载
    • 4.封装函数

在这里插入图片描述

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();
    }
}

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python多行缩进——提高代码可读性和效率的关键

Python多行缩进——提高代码可读性和效率的关键 众所周知&#xff0c;Python是一种缩进敏感的编程语言&#xff0c;它鼓励程序员使用缩进来表示代码块&#xff0c;而非传统的大括号或关键字。在Python中&#xff0c;缩进通过使用空格或制表符来实现&#xff0c;而且空格和制表…

深度剖析整形数据在内存中的存储

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习数据的存储。 让我们开启c语言学…

Linux命令(31)之watch

Linux命令之watch 1.watch介绍 linux命令watch是周期性的用来执行某命令&#xff0c;并把某命令执行结果输出到屏幕上。使用watch命令&#xff0c;可以周期性的监测并输出某命令的执行结果到屏幕上&#xff0c;省得手动一遍一遍运行某命令&#xff0c;提高工作效率。 2.watc…

PHP伪协议filter详解,php://filter协议过滤器

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 php://filter 一、访问数据流二、过滤数据流三、多…

[第一章 web入门]SQL注入-2

拿到题目后看提示&#xff0c;要自主访问两个页面 访问login.php后&#xff0c;是一个登录界面&#xff0c;直接测试注入类型 第一件事还是输入常用账户名admin&#xff0c;密码随便输入 回显账号或者密码错误 这种登录界面一般都是字符型注入&#xff0c;所以测试一下闭合符&a…

【力扣刷题 | 第七天】

前言&#xff1a; 今天我们将会进入栈与队列的刷题篇章&#xff0c;二者都是经典的数据结构&#xff0c;熟练的掌握栈与队列实现可以巧妙的解决有些问题。 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队…

野火Renesas R4M2 UDS诊断bootloader 升级MCU

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

从零开始Vue项目中使用MapboxGL开发三维地图教程(一)MapboxGL介绍以及前期vue项目的搭建

MapboxGL介绍以及前期vue项目的搭建 1、Mapbox-gl简介2、搭建vue项目2.1、创建vue项目2.2、注册mapbox官网2.3、mapbox-gl入门案例 3、Mapbox-gl地图主要配置参数说明 1、Mapbox-gl简介 Mapbox-gl是一个开源、基于webgl技术的前端地图类库。 地图数据渲染和可视化这块我们经常用…

chatgpt赋能python:如何培训Python?-从入门到专业化

如何培训Python&#xff1f;- 从入门到专业化 Python是一种高级编程语言&#xff0c;已被广泛应用于各种领域以及各种应用程序的开发中。如果你也想成为一名Python开发人员&#xff0c;有以下几种培训方法帮助你一步步实现你的目标。 1.自学Python 学习Python的最简单方法是…

【前端 - CSS】第 13 课 - CSS 应用案例 - 体育新闻

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、示例代码 3、总结 1、缘起 最近学习完了 CSS 的 引入方式、选择器 和 字体修饰属性 的相关知识点&#xff0c;然后运…

redis(一),redis简介,Linux下安装及基本配置

一.redis简介&#xff1a; 1.什么是redis Redis 是完全开源的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的 key-value 数据库。它属于NoSQL数据库。 2.NoSQL简介&#xff1a; NoSQL有两种说法&#xff0c;一般指的是非关系型数据库&#xff0c;另一种说法是说它是“…

xml parser - etree

import xml.etree.ElementTree as ET# https://docs.python.org/3/library/xml.etree.elementtree.html # https://zhuanlan.zhihu.com/p/502584681def main():tree ET.parse(./country_data.xml)# 获取根元素root tree.getroot()print("{} {}".format(type(root),…

chatgpt赋能python:Python3.7安装指南

Python 3.7 安装指南 Python是一种高级编程语言&#xff0c;被广泛应用于Web开发、数据科学、人工智能等领域。而最新版本的Python 3.7则提供了更加稳定、更加高效的开发环境。这篇文章将介绍如何在不同的操作系统中安装Python 3.7。 Windows系统安装 Python 3.7 在Windows系…

chatgpt赋能python:安装Platform模块——让Python更好用

安装Platform模块——让Python更好用 Python是一种跨平台的编程语言&#xff0c;可以在不同操作系统上使用。作为Python的一个标准模块&#xff0c;Platform模块可以帮助开发者轻松获取有关操作系统及其特征的信息。这篇文章将介绍如何安装Platform模块&#xff0c;并提供一些…

cxGrid自动保存当前单元格输入的数据

遇到的问题&#xff0c;利用cxGrid做数据录入界面&#xff0c;当用户在一个单元格中录入数据&#xff0c;没有回车&#xff0c;然后直接点工具条上的保存按钮&#xff0c;执行数据提交&#xff0c;结果当前输入的内容丢掉了&#xff0c;又回到输入前的值。 在群中求助&#xf…

axios实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台

文章目录 &#x1f4cb;前言&#x1f3af;demo 介绍&#x1f3af;后端与接口的调试&#x1f9e9;关于运行后端项目&#x1f9e9;关于接口的调试 &#x1f3af;功能分析&#x1f9e9;数据的展示与分页功能&#x1f9e9;添加功能&#x1f9e9;编辑功能&#x1f9e9;删除功能 &…

大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(一)

文章目录 写在前面整体效果开发所需环境开发工具需要具备的知识Node安装更改npm包安装的目录设置npm镜像vscode安装创建vue项目代码编写项目先体验注意写在前面 stable-diffusion-webui(以下简称sd)项目通过FastAPI对外提供了一系列的api用于开发者二次开发或者集成到自己的…

真正理解微软Windows程序运行机制——窗口机制(第三部分)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术&#xff0c;为了解释这个我之前还写过帖子&#xff0c;但是很多人还是不理解。其实这没什么&#xff0c;我在学生时代也被这个问题困绕过。…

帆软报表二次开发 树组件节点上添加自己的按钮

我这里的需求是在树组件的子节点上加一个复制按钮。 先看效果 这是一颗多选树,用的是bi.tree_value_chooser_pane 这个组件,这个组件默认支持多选,它默认的效果为: 这个组件没有提供机制来自定义节点的渲染。 通过查找源码发现这个组件内部构建树是通过BI.$.fn.zTree来构…

C语言进阶---数据的存储

1、整形存储和大小端 本章重点&#xff1a; 1、数据类型详细介绍 2、整型在内存中的存储&#xff1a;原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 1.1、数据类型介绍 char 1byte //字符数据类型 short 2byte //…