PHP phpoffice/phpspreadsheet导出excel

2023-10-31

PHP phpoffice/phpspreadsheet导出excel

由于PHPExcel已经被废弃在PHP7.2中已经无法获取更新,官方重新开了一个新包phpspreadsheet
注意:这里使用的是tp6框架做测试

第一步:使用composer在根项目下安装phpspreadsheet
安装命令:composer require phpoffice/phpspreadsheet
安装成功后,会在vendor目录下成一个目录:phpoffice
在这里插入图片描述
第二步:后端代码处理
注意:顶部引入第三方类库
use PhpOffice\PhpSpreadsheet\Spreadsheet;
在这里插入图片描述

- 代码:
/*

  /*
    * 数据处理
    */
    public function derive()
    {
        //需导出的数据,多条数据
        $data = [
            [
                'time' => '时间',
                'order_num' => '付款人数',
                'did' => '付款订单数',
                'total_price' => '付款金额',
                'good_num' => '付款件数'
            ],
            [
                'time' => '时间',
                'order_num' => '付款人数',
                'did' => '付款订单数',
                'total_price' => '付款金额',
                'good_num' => '付款件数'
            ]
        ];
        $xlsName = "测试" . date("YmdHis", time());//文件名称
        $head = ['日期', '付款人数', '付款订单数', '付款金额', '付款件数'];// 表头信息
        //表字段和表头信息一一对应
        $keys = ['time', 'order_num', 'did', 'total_price', 'good_num'];
        $this->downloadExcel($xlsName, $data, $head, $keys);// 传递参数

    }
 /*
     * 导出数据
     */
    public function downloadExcel($name, $data = [], $head = [], $keys = [])
    {
        $count = count($head);  //计算表头数量
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始,循环设置表头:
            $sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
        }
        //循环设置单元格:
        foreach ($data as $key => $item) {
            //$key+2,因为第一行是表头,所以写到表格时   从第二行开始写
            for ($i = 65; $i < $count + 65; $i++) {
                //数字转字母从65开始:
                $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]]);
                //固定列宽
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20);
            }

        }
         $names = $name;
        //utf-8转unicode格式
        $name = iconv('UTF-8', 'UCS-2BE', $name);
        $len = strlen($name);

        $str = '';

        for ($i = 0; $i < $len - 1; $i = $i + 2) {

            $c = $name[$i];

            $c2 = $name[$i + 1];

            if (ord($c) > 0) {

                $str .= '\u' . base_convert(ord($c), 10, 16) . str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);

            } else {

                $str .= '\u' . str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);

            }

        }

//        header('Content-Type: application/vnd.ms-excel');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

        header('Data-Type: binary');
        //前端导出数据根据这个unicode格式解析为中文
        header('Data-Filename: ' . $str);
        header('Content-Disposition: attachment;filename="' . $names . '.xlsx"');
        header('Cache-Control: max-age=0');
        header('Access-Control-Expose-Headers:Data-Type,Data-Filename');
       
        //header('Content-Type: application/vnd.ms-excel');
        //header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
        //header('Cache-Control: max-age=0');
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->save('php://output');
        exit;

    }

设置Excel表格样式

$sheet = $spreadsheet->getActiveSheet();


 // 合并单元格
$sheet->mergeCells('A1:L1');
  
// 设置单元格值
$sheet->setCellValue('A1',$value);
  
//设值行高
$sheet->getRowDimension('1')->setRowHeight(16);
  
//设置表头信息字体大小
$sheet->getCell('A1')->getStyle()->getFont()->setSize(12);
  
//设置所有字体
$spreadsheet->getDefaultStyle()->getFont()->setName('微软雅黑');
  
//设置水平默认对齐方式
$spreadsheet->getDefaultStyle()->getAlignment()
   ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
   
//设置垂直默认对齐方式
$spreadsheet->getDefaultStyle()->getAlignment()
	   ->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
//设置外边框和内边框
$styleArray = [
			   'borders' => [
				   'outline' => [
					   'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
				   ],
				   'inside' =>[
					   'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
				   ]
			   ],
		   ];

$sheet->getStyle('A1:L20')->applyFromArray($styleArray);
//设置列宽
$spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(14);
   
//设置单元格为文本格式
$sheet->getCell('A'.$row)->getStyle()->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_TEXT);

//新增一个sheet
$sheet = $spreadsheet->createSheet();
//设置字体颜色
$sheet->getCell("B$startRow")->getStyle()->getFont()
                    ->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
 //字体加粗
    $sheet->getCell("A$startRow")->getStyle()->getFont()->setBold(true);                   
//设置单元格背景色
   $spreadsheet->getActiveSheet()->getStyle($column .($beginRow))->getFill()
                        ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
                        ->getStartColor()->setARGB('FF9800');
//设置公式
$sheet->setCellValue(
                        "C1",
                        "=SUM(F1:F10)"
                    );
                   
		
		
		
		
		

到这PHP 使用phpoffice/phpspreadsheet导出excel就完成了,后需可以根据自己业务需要做对应的调整

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP phpoffice/phpspreadsheet导出excel 的相关文章

  • 如何在VBA编辑器中跳转到行号?

    我在 Office 2010 中使用 VBA 在顶部 有一个带有行号和列号的框 例如 Ln 1480 Col 17 有没有办法在代码编辑中 而不是在执行中 直接跳转到另一个行号 就像我使用的那样Ctrl G在记事本中 这个MSDN答案 ht
  • Excel 工作簿 - 从 C# 读取速度非常慢?

    正在尝试读取 Excel 工作簿 发现读取 3560 行 7 列的工作表需要很长时间 大约需要 1 分 17 秒 我所做的就是循环遍历整个工作表并将值存储在列表中 这是正常现象 还是我做错了什么 static void Main strin
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • 如何在 Excel 中对一组数据进行排序以匹配另一组数据?

    我有一个不按字母或数字顺序排列的数据列表 我想对同一日期的第二个列表进行排序以匹配第一个列表 我无法更改数据的顺序 我的目标是将第二组中的附加数据粘贴回第一个数据集中 DATA SET A DATA SET B 22350 BH160 10
  • Excel FILTER() 对于空白单元格返回 0

    我怀疑以前有人问过这个问题 但我找不到 FILTER 即使指定了返回字符串 通常也会为空白行返回 0 Using filter 我经常收到空单元格的 0 返回值 假设 A 列中有 6 行数据 abc xyz abc xyz abc If I
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • 在VBA中初始化全局变量

    在 Excel 2003 中 如何声明全局变量并仅在打开工作簿时初始化它们一次 我有一些由几个宏使用的参数 基本上是输入文件的路径 目前 我的代码如下所示 global path1 path2 as string sub initPaths
  • 使用 FindElementbyXpath() 获取 Selenium Basic 中可填充框的行和列名称

    我正在使用 Selenium Basic 将电子表格中的文本填充到网站中 网站的html代码是这样的 div table cellspacing 0 border 1 style width 99 tr th style font weig
  • 有没有更快的方法来使用Powershell解析Excel文档?

    我正在与一个接口MS Excel文件通过Powershell 每个 Excel 文档可能有大约 1000 行数据 目前这个脚本似乎读取了Excel文件并以每 0 6 秒 1 条记录的速率将值写入屏幕 乍一看 这似乎非常慢 这是我第一次阅读E
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • 数据透视表错误 |无效的调用或过程

    我需要一些帮助来解决这个问题 我正在尝试创建一个数据透视表 从第一季度开始 在同一张表中包含一系列数据 第一个 if 语句在那里是因为最后一列并不总是包含标题 所以我将其包含在那里 我希望范围是动态的 因为所制作的表格的大小将根据工作表中数
  • 将 HTML 转换为 Excel 的最佳方法是什么

    我有一个 HTML 页面 其中包含 Flash 图表 FusionCharts 和 HTML 表格 我需要将这整个事情转换成Excel HTML 表格应显示在 Excel 工作表的单元格中 Flash 图表可以显示为图像 我们可以使用任何开
  • 使用 PhpSpreadsheet PHP 设置单元格边框样式

    我使用 PhpSpreadsheet 来读取或写入 Excel 文件 我想向我的 Excel 添加边框样式 所以我使用了以下代码
  • 计算序列中的重复值

    如何使用Excel计算列中的重复数据 Example A B apple 1 apple 2 apple 3 ball 1 bat 1 dog 1 dog 2 gole 1 gole 2 gole 3 gole 4 我认为对于你的情况中的所
  • 使用宏从 Excel 电子表格中删除任何非指定字符

    我正在尝试通过删除任何非标准字符来清理 Excel 中的 CSV 文件 我唯一关心保留的字符是 A Z 0 9 和一些标准标点符号 任何其他字符 我想删除 当它找到包含我未指定的任何字符的单元格时 我已经得到了以下宏来删除整行 但我不确定如
  • 使用 Excel VBA 循环工作簿文件夹并将所有工作表导出为制表符分隔文本

    我拼凑了一个 Excel VBA 脚本 该脚本将打开的工作簿中的所有工作表写入单独的制表符分隔文件 这仍然是 宏 吗 我正在 Excel 真空中学习这一点 它一次只处理一本工作簿 效果很好 这里是 Sub exportSheetsToTex
  • 如何获取活跃的Excel实例?

    我有一个 C 应用程序 该应用程序根据用户需求将信息粘贴到 excel 背后的逻辑是这样的 如果没有正在运行的 excel 实例 它会创建一个实例并粘贴到该实例 如果只有一个实例在运行 它会尝试获取该实例并使用它 这是我用来执行此操作的代码
  • python XlsxWriter 设置多个单元格周围的边框

    I need an easy way to set border around multiple cells like so 我发现的只是 1 个单元格的边框 并合并单元格 这不是我需要的 我期待类似的事情 worksheet range
  • 勾选或取消勾选复选框时输入时间戳

    我有一个 3 行 7 列的工作表 A1 G3 A 和 B 列有 6 个复选框 A1 B3 A 列和 B 列中的框分别链接到 C 列和 D 列 E 列和 F 列中的单元格只是分别复制 C 列和 D 列 实时E1细胞是 C1 and F3细胞是
  • 溢出范围:将数组转换为与 @ 的交集值

    在 Excel 引入溢出范围之前 在 运算符 可以使用 将范围 转换 为单个值0 数值 或 字符串 但 并不完全相同 假设有一列正整数从B4向南 从D2向东有一行正整数 并且 A 列和 C 列以及第 1 行和第 3 行完全是空的 目的是将单

随机推荐

  • 下载chromium源码执行 generate_location_tags.py错误returned non-zero exit status 1

    今天下载chromium 碰到这个错误 以前也下载过 都很顺利 Error Command python3 src testing generate location tags py out src testing location tag
  • SVD分解的并行实现

    在之前的文章中 我对SVD进行了大致的了解 它在互联网高端领域中有广泛的应用 至于它的一些详细应 用以后再进一步学习 现在主要的问题是如何有效地实现SVD分解 接下来我会先用两种方法来实现SVD分 解 即基于双边Jacobi旋转的SVD和基
  • Jieba库的安装

    一 jieba库安装 jieba库是第三方库 不是安装包自带 需要通过pip指令安装 gt pip install jieba 或者 pip3 install jieba 方法一 直接安装 不建议使用 亲测安装很多python库的时候大家获
  • Hierarchical attentive knowledge graph embedding for personalized recommendation

    Hierarchical attentive knowledge graph embedding for personalized recommendation 文章目录 1 背景 2 模型 2 1 子图构建 2 2 Hierarchica
  • 第一个Java项目———Java实现简单图书管理系统(GUI)

    暑假写了个图书管理系统 编译器用的是eclipse 加入了WindowBuilder插件做界面 做的特丑 数据库用的是MySQL 实现了图书的查询 借阅 归还 删除 增加 用户的删除 查询 分为管理员和用户 源码地址 GitHub GitH
  • java项目中常用的分页对象Page

    在使用JAVA平台开发企业级应用时 常常会遇到分页的场景 而且每一个项目都有自己的分页方法 现在给出我自己总结的比较通用的分页对象 以供有需之人参考 package cn cgs corejava model persistent impo
  • 删除 Android Studio 的代理设置,让项目通过阿里云 maven jcenter 下载依赖资源

    如果你之前设置过 Android Studio 的 HTTP Proxy 然后又取消了代理设置 那么很有可能 Andoid Studio gradle 再次编译时仍然会走代理设置 造成依赖资源一直下载失败 1 删除 Android Stud
  • 用C语言计算1~20的阶乘之和

    昨天 2018 12 7 在做C语言的课后练习题的时候 有一道题要求我们计算1 20的阶乘之和 代码很快就写出来了 考虑到结果的值会比较大 而在Windows操作系统下 int 类型和 long 类型居然都是4个字节 C 中long类型是八
  • linux 下 java 单个class文件执行和多个class文件打包调用,执行

    银行项目 给个linux机器权限控制的比较厉害 之前有需求需要切割个日志文件 所以开始就写一个java文件 然后编译成class 直接运行 还算方便 后来需求越来越多 需要查询数据 需要操作excel 还因为字段处理等需要引入更多的累 打包
  • STL 之 List简析

    文章目录 前言 list介绍 list的节点 list的迭代器 SGI迭代器 VS下的迭代器的不同之处 list整体结构 list的成员方法 前言 记得我的一位老师说过 好的结构一定会有好的结果 C 的STL是数据结构与算法的集大成者 而其
  • C或C++文件操作大全

    文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 fgets 从文件中读取一个字符串 fputs 写一个字符串到文件中去
  • 【面试八股文】每日一题:谈谈你对集合的理解

    每日一题 Java核心 谈谈你对集合的理解 面试八股文 谈谈你对集合的理解 Java集合是Java编程语言中用于存储数据的容器 它提供了一系列的类和接口 用于操作和管理数据集合 Java集合框架主要包括以下几个重要的接口和类 List Li
  • PPCA(Probability PCA)

    伯克利的机器学习课的note当中简要介绍了一下PPCA 但是我看了感觉没写什么东西 Yu姐上PPCA那节课我翘了 导致我对于PPCA几乎是一无所知 碰巧翻了一下工大自己的机器学习课的ppt 翻到了关于PPCA的内容 所以就结合CS189的n
  • 简单版扫雷游戏 温柔手把手教你实现 :>

    基本构思 1 菜单 创建一个简单的菜单来可供选择进行游戏或退出 2 扫雷游戏的创建 a 布局的构成 b 布置地雷 c 获取玩家的坐标 并扫出周围一圈的地雷个数 d 判断游戏的成败 完整代码在底下 1 菜单的创建 void menu prin
  • Candy

    Description There are N children standing in a line Each child is assigned a rating value You are giving candies to thes
  • 【蓝桥杯题解】

    顺子日期 小明特别喜欢顺子 顺子指的就是连续的三个数字 123 456 等 顺子日期指的就是在日期的 yyyymmdd 表示法中 存在任意连续的三位数是一个顺子的日期 例如 20220123 就是一个顺子日期 因为它出现了一个顺子 123
  • CentOS Linux的最佳替代方案(三)_银河麒麟Kylin Linux Advanced Server V10 SP2 for X86安装教程

    文章目录 CentOS Linux的最佳替代方案 三 银河麒麟Kylin Linux Advanced Server V10 SP2 for X86安装教程 1 银河麒麟Kylin Linux Advanced Server V10简介 1
  • python美元和人民币双向兑换程序_Python:程序练习题(二)

    Python 程序练习题 二 2 1温度转换程序 代码如下 t input 请输入带符号的温度值 如 32C if t 1 in C c f 1 8 float t 0 1 32 print 转换后的温度为 0fF f elif t 1 i
  • 【100天精通Python】Day46:Python网络编程_网络编程基础与入门

    目录 专栏导读 1 网络编程的基础 2 基本概念和协议 2 1 计算机网络基础 2 2 网络协议 IP地址 端口号 2 3 常见网络协议 3 套接字编程 3 1 套接字的基本概念 3 2 套接字的基本操作 3 3 套接字通信模型和方法 se
  • PHP phpoffice/phpspreadsheet导出excel

    PHP phpoffice phpspreadsheet导出excel 由于PHPExcel已经被废弃在PHP7 2中已经无法获取更新 官方重新开了一个新包phpspreadsheet 注意 这里使用的是tp6框架做测试 第一步 使用com