PhpSpreadsheet表格导出

2024-06-04 01:36

本文主要是介绍PhpSpreadsheet表格导出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人笔记记录

使用PhpSpreadsheet 导出excel。

多重表头生成excel 表

    //读取数据库public function demo1(){// 连接spc数据库$config = Config::get('databaseedc');$db = Db::connect($config);$data =$db->name("xxxx")->alias('a')->field('main_header, sub_header,fvi_value')->join('')->where('')->select();$this->exportDataToExcel($data);}
    // 将数据转换为Excel格式并保存function exportDataToExcel($data) {//从初始化表格$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();// 处理数据和表头$mainHeaders = $this->getMainHeaders($data);//提取次级表头和数据$subHeadersAndData = $this->getSubHeadersAndData($data);// 设置表头$this->setHeaders($sheet, $mainHeaders, $subHeadersAndData);//设置Excel的数据$currentRow = 2;//初始行$col=1; //初始列//循环主表头foreach ($mainHeaders as $subData){//循环次级表头和数据foreach ($subHeadersAndData as $subHeaderKey => $subHeaderData) {// 获取主表头部分$mainHeaderPart = explode('_', $subHeaderKey)[0];//查找于当前表头一致的数据if($mainHeaderPart==$subData){echo("<pre>");print_r($subHeaderKey);//设置子标题:$sheet->setCellValueByColumnAndRow($col, $currentRow, $subHeaderData['sub_header']);//设置子标题相关的数据foreach ($subHeaderData['data'] as $index => $value) {$sheet->setCellValueByColumnAndRow($col, $currentRow + $index + 1, $value);}$col++;}}}// 保存文件$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$filename = './excel/' . date('YmdHis') . '.xlsx'; // 使用动态文件名避免冲突$result = $writer->save($filename);}
    //从数据中提取主表头public function getMainHeaders($data) {$mainHeaders = [];foreach ($data as $item) {//检查 main_header 是否已在 $mainHeaders 中if (!in_array($item['main_header'], $mainHeaders)) {//不存在,加入数组$mainHeaders[] = $item['main_header'];}}return $mainHeaders;}
    //从数据中提取次级表头和数据function getSubHeadersAndData($data) {$subHeaders = [];//存储处理后的子标题及其相关数据$rowData = [];foreach ($data as $item) {$subHeaderKey = $item['main_header'] . '_' . $item['sub_header'];//检查 $subHeaders 数组中是否已经存在该子标题键if (!isset($subHeaders[$subHeaderKey])) {$subHeaders[$subHeaderKey] = ['sub_header' => $item['sub_header'],'data' => []];}//$item 中的 'fvi_value' 添加到与该子标题关联的 'data' 数组中。$subHeaders[$subHeaderKey]['data'][] = $item['fvi_value'];}return $subHeaders;}
    //设置Excel的表头function setHeaders($sheet, $mainHeaders, $subHeadersAndData) {//从第一行第一列开始$col = 1;$row = 1;//遍历主标题foreach ($mainHeaders as $mainHeader) {//设置主标题$sheet->setCellValueByColumnAndRow($col, $row, $mainHeader);//计算与当前主标题相关的子标题数量$subHeadersCount = count(array_filter(array_keys($subHeadersAndData), function($key) use ($mainHeader) {return strpos($key, $mainHeader . '_') === 0;}));//合并单元格if ($subHeadersCount > 0) {$sheet->mergeCells(Coordinate::stringFromColumnIndex($col) . $row . ':' . Coordinate::stringFromColumnIndex($col + $subHeadersCount - 1) . $row);}//更新列索引:$col += $subHeadersCount;}}

在这里插入图片描述

这篇关于PhpSpreadsheet表格导出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028697

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

MySQL使用mysqldump导出数据

mysql mysqldump只导出表结构或只导出数据的实现方法 备份数据库: #mysqldump 数据库名 >数据库备份名 #mysqldump -A -u用户名 -p密码 数据库名>数据库备份名 #mysqldump -d -A --add-drop-table -uroot -p >xxx.sql 1.导出结构不导出数据 mysqldump --opt -d 数据库名 -u

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b