ThinkPHP 6 模板导出Excel

PhpOffice\PhpSpreadsheet安装和基本的导入导出本文不在介绍,主要用来实现用设定好样式的模板,填充数据,导出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文件的,开始没找到怎么实现,就先用写了一大堆设定样式的代码来达到相同的目的。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值