littlebot
Published on 2025-04-12 / 4 Visits
0

【源码】基于PHP框架的灵活Excel导出系统

项目简介

本项目是基于PHP框架的灵活Excel导出系统,用于解决Web应用中前端导出大量数据时页面卡死的问题。它提供了前端批量导出Excel数据的功能,通过简单配置就能实现数据快速导出。

项目的主要特性和功能

  1. 前端分批导出:采用前端分批导出的方式,降低服务器压力,提升用户体验。
  2. 自定义列筛选:支持用户在界面上选择需要导出的列,增强导出的灵活性。
  3. 辅助类与插件:提供辅助类和插件,简化Excel导出的复杂操作。
  4. 合并单元格支持:能够导出包含合并单元格的复杂表格。
  5. 错误处理与提示:业务层出现错误时,可自动获取错误信息并提示用户。

安装使用步骤

安装

已下载项目源码文件后,使用以下命令安装依赖: php composer require quansitech/qscmf-topbutton-export

使用

  1. 在项目中引入相关文件和代码。
  2. 在需要导出Excel的页面添加导出按钮,并配置相关参数。示例如下: ```php class PostController extends GyListController{ //继承ExportExcelByXlsx use ExportExcelByXlsx;

    $builder = new \Common\Builder\ListBuilder(); //第一个参数指定export类型,第二个参数是指定需要覆盖的html组件属性 //title为按钮名称,默认导出excel //data-url为点击导出按钮后ajax请求的地址,必填 //data-filename 为生成的excel文件名,默认为浏览器的默认生成文件名 //data-streamrownum 为每次请求获取的数据数 $builder->addTopButton('export', array('title' => '样例导出', 'data-url' => U('/admin/post/export'), 'data-filename' => '文章列表', 'data-streamrownum' => '10')); } 3. 编写后端处理逻辑,处理导出请求并返回数据:php //导出excel请求的action public function export(){ //exportExcelByXlsx为 Qscmf\Builder\ExportExcelByXlsx trait提供的方法 //参数为一个闭包函数,接收两个参数, page为请求的页数, rownnum为请求的数据行数 $this->exportExcelByXlsx(function($page, $rownum){ //闭包函数必须返回如下数据格式 //[ // [ 'excel表头1' => 行1数据1, 'excel表头2' => 行1数据2 ..... ] // [ 'excel表头1' => 行2数据1, 'excel表头2' => 行2数据2 ..... ] // ... //] return [ [ '姓名' => 'tt', '性别' => 'male', '年龄' => 23 ], [ '姓名' => 'ff', '性别' => 'female', '年龄' => 19 ] ]; }); } ```

其他功能使用

筛选导出列

```php //列配置,default为true表示默认选中状态, required为true表示必选 $cols_options = [ [ 'key' => 'name', 'title' => '商家名称', 'default' => true, 'required' => true ], [ 'key' => 'account', 'title' => '账号', 'default' => true ], [ 'key' => 'address', 'title' => '商家地址' ], [ 'key' => 'num', 'title' => '核销次数' ], [ 'key' => 'status', 'title' => '状态' ], [ 'key' => 'explain', 'title' => '优惠券使用说明' ] ];

//将列配置复制给第二个参数的键值 export_cols //控件会将选择的列数据post至url,可通过I('post.exportCol')获取,再进行数据筛选逻辑处理。 $builder->addTopButton('export', array('export_cols' => $cols_options, 'title' => '样例导出', 'data-url' => U('/admin/post/export'), 'data-filename' => '文章列表', 'data-streamrownum' => '10')); ```

导出数据为多张工作表

```php $export_arr = [ ['sheetName' => 'Sheet1', 'url' => U('/admin/post/export'), 'rownum' => '15'], ['sheetName' => 'Sheet2', 'url' => U('/admin/post/export'), 'rownum' => '15'], ];

$builder->addTopButton('export', ['data-url' => json_encode($export_arr), 'data-filename' => '导出列表', 'data-streamrownum' => intval($export_arr[0]['rownum'])]); ```

导出有合并单元格的表格

```php // 原始数据为 $source_data = [ ['name' => 'name1','nick_name' => 'nick_name1','phone' => 'phone1','tel' => 'tel1'], ['name' => 'name2','nick_name' => 'nick_name2','phone' => 'phone2','tel' => 'tel2'], ['name' => 'name3','nick_name' => 'nick_name3','phone' => 'phone3','tel' => 'tel3'], ];

// 设置每一行的 _cellProperties $source_data = [ ['name' => 'name1','nick_name' => 'nick_name1','phone' => 'phone1','tel' => 'tel1', '_cellProperties' => ['name' => '','nick_name' => '','phone' => '','tel' => '']], ['name' => 'name2','nick_name' => 'nick_name2','phone' => 'phone2','tel' => 'tel2', '_cellProperties' => ['name' => ['rowSpan' => 2],'nick_name' => '','phone' => ['colSpan' => 2],'tel' => ['colSpan' => 0]]], ['name' => 'name3','nick_name' => 'nick_name3','phone' => 'phone3','tel' => 'tel3', '_cellProperties' => ['name' => ['rowSpan' => 0],'nick_name' => '','phone' => '','tel' => '']], ];

$header_mapping = [ 'name' => '表头字段1', 'nick_name' => '表头字段2', 'phone' => '表头字段3', 'tel' => '表头字段4', ];

$export_data = $this->combineListWithNameMapping($source_data, $header_mapping); ```

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】