ThinkPHP 6 模板导出Excel

 相关文章:

《ThinkPHP6 excel 导入功能完整实现》

《ThinkPHP6 excel 导出功能完整实现》

《ThinkPHP 6.0 phpspreadsheet操作Excel表格实例》

1.准备模板文件

创建一个xls/xlsx文件,命名为test,设定一下加粗、居中、合并、行高、列宽等等样式

 

2.加载模板文件

依赖

use PhpOffice\PhpSpreadsheet\IOFactory;

加载模板

$spreadsheet = IOFactory::load('./uploads/test.xlsx');
$sheet = $spreadsheet->getActiveSheet();

3.查询、处理数据

$key = ['id', 'product_name', 'product_desc', 'optionsNo', 'created_at'];
$data = Db::name('product')->order('id', 'asc')->field($key)->limit(0, 10)->select()->toArray();// 处理数据
foreach ($data as &$v) {$v['created_at'] = date('Y/m/d H:i:s', $v['created_at']);
}
unset($v);

4.导出具体实现

// 处理标题 因为合并了 使用A1即可赋值
$sheet->setCellValue('A1', '产品导出数据');// 行标题模板已有 不需处理// 处理内容从第三行开始
$row = 3;
foreach ($data as $item) {$column = 1;foreach ($item as $value) {$sheet->setCellValueByColumnAndRow($column, $row, $value);$column++;}$row++;
}// 文件下载
$filename = './uploads/product1.xlsx';
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($filename);

5.实现效果

可在设置导出的相应路径下,打开文件

6.浏览器下载

也可以改为激活浏览器下载文件

// 行标题模板已有 不需处理
// 处理内容从第三行开始
$row = 3;
foreach ($data as $item) {$column = 1;foreach ($item as $value) {$sheet->setCellValueByColumnAndRow($column, $row, $value);$column++;}$row++;
}$filename = 'product1.xls';
header('Content-Type:application/vnd.ms-excel');
header('Content-Disposition:attachment;filename='.$filename);
header('Cache-Control:max-age=0');$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');

总结:

        ThinkPHP关于Excel操作的文章,算上这篇有4篇了,一开始是想用PHPExcel来实现的,这种很早以前就用过,现在已经不再更新了。然后找别的三方类库来实现,还是通过询问ChatGPT来找到的PhpOffice\PhpSpreadsheet

        接触后就开始摸索,先简单实现导入导出功能,之后如何设定样式,最后实现了模板导出。其实设定样式也不是目的,主要想实现模板导出Excel文件的,开始没找到怎么实现,就先用写了一大堆设定样式的代码来达到相同的目的。

        最后实现导出很简单,就是用导入的方式先加载模板文件,之后把文件数据填充进去,重命名导出文件即可。

本文链接:https://my.lmcjl.com/post/19690.html

展开阅读全文

4 评论

留下您的评论.