翼度科技»论坛 编程开发 PHP 查看内容

ThinkPHP5+PhpSpreadsheet实现批量导出数据

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
前言

为什么使用PhpSpreadsheet?
由于PHPExcel不再维护,所以建议使用PhpSpreadsheet来导出exlcel,但是PhpSpreadsheet由于是个新的类库,所以只支持PHP7.1及以上的版本。
PhpSpreadsheet有哪些功能?
PhpSpreadsheet提供了丰富的API,包括单元格设置、文档属性、图片、日期、函数等,基本满足项目需求。
先介绍如何安装和使用常用的AIP,实例代码放在最后,如果想直接使用可直接跳到第三部分完整实例。

一、安装

使用compose安装PhpSpreadsheet,在项目根目录下执行命令,PhpSpreadsheet会安装到/vendor/下
  1. composer require phpoffice/phpspreadsheet
复制代码
二、API使用

1、引用和实例化
使用composer安装完成后,可在项目中直接使用PhpSpreadsheet。
  1. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  2. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  3. use PhpOffice\PhpSpreadsheet\IOFactory;
  4. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  5. use PhpOffice\PhpSpreadsheet\Style\Border;
  6. use PhpOffice\PhpSpreadsheet\Style\Fill;
  7. use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;

  8. //实例化
  9. $spreadsheet = new Spreadsheet();
  10. // 获取工作表
  11. $sheet = $spreadsheet->getActiveSheet();
复制代码
这里引用了多个PhpSpreadsheet类,下面介绍每个类的作用
  1. 1、\Spreadsheet:工作表
  2. 2、\Writer\Xlsx:导出excel
  3. 3、\IOFactory:导出excel
  4. 4、\Style\Alignment:设置单元格文字水平、垂直居中
  5. 5、\Style\Border:设置单元格边框样式
  6. 6、\Style\Fill:设置单元格背景颜色
  7. 7、\Worksheet\Drawing:写入图片
复制代码
2、 设置单元格的值
把单元格A1的值设置为药品不良反应事件报告表
  1. $sheet->setCellValue('A1', '药品不良反应事件报告表');
复制代码
3、合并单元格
把单元格A1到N1合并
  1. $sheet->mergeCells('A1:N1');
复制代码
4、拆分单元格
  1. $sheet->unmergeCells('A1:A4');
复制代码
5、单元格文字样式
可以设置某一区域的单元格,也可以设置一行或一个单元格的样式
  1. // 字体大小
  2. $sheet->getStyle('A1')->getFont()->setSize(12);
  3. // 文字加粗
  4. $sheet->getStyle('A1:N1')->getFont()->setBold(true);
  5. // 字体设置
  6. $sheet->getStyle('A1:N1')->getFont()->setName('黑体');
复制代码
6、单元格文字水平、垂直居中
给单元格A1中的文字设置水平、垂直居中。需要注意的是需要引用Style\Alignment
  1. use PhpOffice\PhpSpreadsheet\Style\Alignment;

  2. // 水平、垂直居中
  3. $alignstyle = [
  4.      'alignment' => [
  5.           'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中
  6.            'vertical' => Alignment::VERTICAL_CENTER, //垂直居中
  7.        ],
  8. ];

  9. $sheet->getStyle('A1')->applyFromArray($alignstyle);
复制代码
7、单元格边框样式
给单元格A4到B4加边框,可以单独设置上、下、左、右、全面边框,需要引用\Style\Border
  1. use PhpOffice\PhpSpreadsheet\Style\Border;
  2. // 边框样式
  3. $borderstyle = [
  4.      'borders' => [
  5.            'outline' => [
  6.            'borderStyle' => Border::BORDER_THIN,
  7.            'color' => ['argb' => '000000'],
  8.            ],
  9.      ],
  10. ];

  11. $sheet->getStyle('A4:B4')->applyFromArray($borderstyle);
复制代码
8、设置单元格背景颜色
给单元格A4设置背景颜色,需要引用\Style\Fill
  1. use PhpOffice\PhpSpreadsheet\Style\Fill;

  2. $sheet->getStyle('A4')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9');
复制代码
9、设置行高
  1. // 第一行行高设置为30
  2. $sheet->getRowDimension(1)->setRowHeight(30);

  3. // 设置默认行高
  4. $sheet->getDefaultRowDimension()->setRowHeight(20);
复制代码
10、设置列宽
  1. // 设置A列的列宽
  2. $sheet->getColumnDimension('A')->setWidth(15);

  3. // 设置所有单元格的列宽
  4. $sheet->getDefaultColumnDimension()->setWidth('15');
复制代码
11、设置文字颜色
  1. setRGB:颜色值带#号
  2. setARGB:颜色值不带#号
复制代码

  1. $sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE');


  2. $sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');
复制代码
12、设置超链接
给单元格E6中的文字设置超链接
  1. $sheet->setCellValue('E6', '百度');
  2. $sheet->getCell('E6')->getHyperlink()->setUrl('www.baidu.com');
复制代码
13、设置sheet的标题
  1. // 设置sheet名称
  2. $sheet->setTitle('ADR报告');
复制代码
14、使用函数
  1. SUM:求和
  2. VERAGE:平均数
  3. MIN:最小值
  4. MAX:最大值
复制代码
  1. $sheet->setCellValue('A3', '=SUM(A1:A2)');
复制代码
15、写入图片
往单元格里写入图片,需要引用\Worksheet\Drawing
  1. use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
  2. //写入图片
  3. $drawing = new Drawing();
  4. $drawing->setName('Logo')->setDescription('Logo')->setPath('../files/1.jpg')->setHeight(30)->setCoordinates('D6')->setOffsetX(50)->setOffsetY(6);
  5. $drawing->setRotation(25);
  6. $drawing->getShadow()->setVisible(true);
  7. $drawing->getShadow()->setDirection(45);
  8.   
  9. $drawing->setWorksheet($sheet);
复制代码
16、导出xlsx文件
需要引用IOFactory
  1. use PhpOffice\PhpSpreadsheet\IOFactory;

  2. // MIME 协议,文件的类型,不设置,会默认html
  3. header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  4. // MIME 协议的扩展
  5. header('Content-Disposition: attachment;filename="' . iconv("utf-8", "GB2312", $filename) . '.xlsx');
  6. // 缓存控制
  7. header('Cache-Control:max-age=0');
  8. $write = IOFactory::createWriter($spreadsheet, 'Xlsx');
  9. $write->save('php://output');
复制代码
17、导出xls文件
需要引用IOFactory
  1. use PhpOffice\PhpSpreadsheet\IOFactory;

  2. // MIME 协议,文件的类型,不设置,会默认html
  3. header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  4. // MIME 协议的扩展
  5. $filename = date('Y-m-d').'工作报告单';
  6. header('Content-Disposition:attachment;filename='.$filename .'.xls');
  7. // 缓存控制
  8. header('Cache-Control:max-age=0');
  9. $write = IOFactory::createWriter($spreadsheet, 'Xls');
  10. $write->save('php://output');
复制代码
三、完整实例
  1. $adrinfo = array(); if (!empty($adrinfo)) { //实例化$spreadsheet = new Spreadsheet(); $filename = $adrinfo['name'].'_ADR报告'.date('YmdHis').rand(10000, 99999);       //导出文件名 $sheet = $spreadsheet->getActiveSheet(); //样式// 边框样式$borderstyle = [    'borders' => [        'outline' => [            'borderStyle' => Border::BORDER_THIN,            'color' => ['argb' => '000000'],        ],    ],];// 水平、垂直居中$alignstyle = [    'alignment' => [        'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中        'vertical' => Alignment::VERTICAL_CENTER, //垂直居中    ],]; 第一行 表头/        // 合并单元格$sheet->mergeCells('A1:N1');// 设置表格第一行显示内容$sheet->setCellValue('A1', '药品不良反应/事件报告表');$sheet->getStyle('A1')->getFont()->setSize(12); // 设置单元格字体大小 // 水平、垂直居中$sheet->getStyle('A1')->applyFromArray($alignstyle); // 设置行高$sheet->getRowDimension(1)->setRowHeight(30); //设置列宽$sheet->getDefaultColumnDimension()->setWidth('15'); // 加粗$sheet->getStyle('A1:N1')->getFont()->setBold(true);// 设置sheet名称$sheet->setTitle($adrinfo['name'].'_ADR报告'); 内容// 第2行$sheet->setCellValue('A2','首次/跟踪:');$sheet->setCellValue('B2','首次报告');// 设置单元格背景颜色// $sheet->getStyle('A2')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9');  // 设置行高$sheet->getRowDimension('2')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A2:N2')->applyFromArray($alignstyle);  // 第3行$sheet->setCellValue('A3','已知/新的:');$sheet->setCellValue('C3','一般/严重:'); $sheet->setCellValue('E3',$adrinfo['qingkuang']);// 合并单元格$sheet->mergeCells('E3:N3');$sheet->getRowDimension('3')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A3:D3')->applyFromArray($alignstyle); // 第4行$sheet->setCellValue('A4','患者姓名');$sheet->setCellValue('B4',$adrinfo['name']);$sheet->setCellValue('C4','性别');$sheet->setCellValue('D4',$adrinfo['xingbie']);$sheet->setCellValue('E4','出生日期');$sheet->setCellValue('F4',$adrinfo['nianyue']);$sheet->setCellValue('G4','或年龄');$sheet->setCellValue('H4',$adrinfo['nianling']);$sheet->setCellValue('I4','岁');// 设置边框$sheet->getStyle('A4:B4')->applyFromArray($borderstyle);$sheet->getStyle('C4:D4')->applyFromArray($borderstyle);$sheet->getStyle('E4:F4')->applyFromArray($borderstyle);$sheet->getStyle('G4:N4')->applyFromArray($borderstyle);// 设置行高$sheet->getRowDimension('4')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A4:N4')->applyFromArray($alignstyle); // 第5行$sheet->setCellValue('A5','民族:');$sheet->setCellValue('B5',$adrinfo['minzu']);$sheet->setCellValue('C5','体重:');$sheet->setCellValue('D5',$adrinfo['tizhong']);$sheet->setCellValue('E5','千克');$sheet->setCellValue('G5','联系方式:');$sheet->setCellValue('H5',$adrinfo['dianhua']);// 设置边框$sheet->getStyle('A5:B5')->applyFromArray($borderstyle);$sheet->getStyle('C5:F5')->applyFromArray($borderstyle);$sheet->getStyle('G5:N5')->applyFromArray($borderstyle);// 设置行高$sheet->getRowDimension('5')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A5:N5')->applyFromArray($alignstyle);  // 第6行$sheet->setCellValue('A6','原患疾病:');$sheet->setCellValue('G6','医院名称:');$sheet->setCellValue('H6',$adrinfo['member']['danwei']);$sheet->setCellValue('K6','病历号/门诊号:');$sheet->setCellValue('L6',$adrinfo['jiuzhenhao']);// 设置边框$sheet->getStyle('A6:F6')->applyFromArray($borderstyle);$sheet->getStyle('G6:J6')->applyFromArray($borderstyle);$sheet->getStyle('K6:N6')->applyFromArray($borderstyle);// 合并单元格$sheet->mergeCells('B6:F6');$sheet->mergeCells('H6:J6');// 设置行高$sheet->getRowDimension('6')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A6:N6')->applyFromArray($alignstyle);// 设置单元格背景颜色// $sheet->getStyle('A6')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9');   // 第7行$sheet->setCellValue('A7','既往药品不良反应/事件:'); // 设置边框$sheet->getStyle('A7:B7')->applyFromArray($borderstyle);$sheet->getStyle('C7:N7')->applyFromArray($borderstyle);// 合并单元格$sheet->mergeCells('C7:N7');// 设置行高$sheet->getRowDimension('7')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A7:B7')->applyFromArray($alignstyle);// 设置单元格背景颜色// $sheet->getStyle('A7')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9');  // 第8行$sheet->setCellValue('A8','家族药品不良反应/事件:');$sheet->setCellValue('B8','不详');// 设置边框$sheet->getStyle('A8:N8')->applyFromArray($borderstyle);// 设置行高$sheet->getRowDimension('8')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A8:N8')->applyFromArray($alignstyle);// 设置单元格背景颜色// $sheet->getStyle('A8')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9');  // 第9行$sheet->setCellValue('A9','相关重要信息:');$sheet->setCellValue('B9',$adrinfo['huanzheqingkuang'].';过敏:'.$adrinfo['guomin']);// 设置边框$sheet->getStyle('A9:N9')->applyFromArray($borderstyle);// 合并单元格$sheet->mergeCells('B9:N9');// 设置行高$sheet->getRowDimension('9')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A9')->applyFromArray($alignstyle); // 设置单元格背景颜色// $sheet->getStyle('A9')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9');  // 第10行 怀疑药品$sheet->setCellValue('B10','批准文号')      ->setCellValue('C10','商品名')      ->setCellValue('D10','通用名')      ->setCellValue('E10','生产厂家')      ->setCellValue('F10','生产批号')      ->setCellValue('G10','次剂量')      ->setCellValue('H10','给药途径')      ->setCellValue('I10','频次')      ->setCellValue('J10','开始用药日期')      ->setCellValue('K10','停止用药日期')      ->setCellValue('L10','用药原因')      ->setCellValue('M10','停药是否消失减轻')      ->setCellValue('N10','再次用药是否再出现');    // 统计共上传了多少条药品记录$cc = count($adrinfo['yaowu']);// 下一项开始行序号$i = 10+$cc; // 设置边框$sheet->getStyle('A10')->applyFromArray($borderstyle); $sheet->getStyle('B10')->applyFromArray($borderstyle); $sheet->getStyle('C10')->applyFromArray($borderstyle); $sheet->getStyle('D10')->applyFromArray($borderstyle); $sheet->getStyle('E10')->applyFromArray($borderstyle); $sheet->getStyle('F10')->applyFromArray($borderstyle); $sheet->getStyle('G10')->applyFromArray($borderstyle); $sheet->getStyle('H10')->applyFromArray($borderstyle); $sheet->getStyle('I10')->applyFromArray($borderstyle); $sheet->getStyle('J10')->applyFromArray($borderstyle); $sheet->getStyle('K10')->applyFromArray($borderstyle); $sheet->getStyle('L10')->applyFromArray($borderstyle); $sheet->getStyle('M10')->applyFromArray($borderstyle); $sheet->getStyle('N10')->applyFromArray($borderstyle); // 设置行高$sheet->getRowDimension('10')->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A10:N10')->applyFromArray($alignstyle); if (!empty($adrinfo['yaowu'])) {        // 合并单元格    $sheet->mergeCells('A11:A'.$i);    $sheet->setCellValue('A11','怀疑药品');    // 水平、垂直居中    $sheet->getStyle('A11:A'.$i)->applyFromArray($alignstyle);    // 设置边框    $sheet->getStyle('A11:A'.$i)->applyFromArray($borderstyle);             $k = 0;    foreach ($adrinfo['yaowu'] as $v) {                $k++;        $sheet->setCellValue('B'.($k+10), str_replace('批准文号:','',$v[3]))                        //->setCellValue('C'.($k+10), str_replace('药品','',$v[0]))                        ->setCellValue('D'.($k+10), str_replace('药名:','',$v[0]))                        ->setCellValue('E'.($k+10), str_replace('公司:','',$v[1]))                        ->setCellValue('F'.($k+10), str_replace('产品批号:','',$v[2]))                        ->setCellValue('G'.($k+10), str_replace('用量:','',$v[5]))                        ->setCellValue('H'.($k+10), str_replace(array('如何用药:','/'),'',$v[7]))                        ->setCellValue('I'.($k+10), str_replace(array('频次:','/'),'',$v[6]))                        ->setCellValue('J'.($k+10), str_replace('开始服用该药的日期:','',$v[9]))                        ->setCellValue('K'.($k+10), str_replace('停止服用该药的日期:','',$v[10]))                        ->setCellValue('L'.($k+10), str_replace('为什么患者要使用这个药品:','',$v[8]))                      ->setCellValue('M'.($k+10), str_replace('停药是否消失减轻:','',$v[12]))                      ->setCellValue('N'.($k+10), str_replace('再次用药是否再出出现:','',$v[13]));                                  // 设置边框        $sheet->getStyle('B'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('C'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('D'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('E'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('F'.($k+10))->applyFromArray($borderstyle);        $sheet->getStyle('G'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('H'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('I'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('J'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('K'.($k+10))->applyFromArray($borderstyle);        $sheet->getStyle('L'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('M'.($k+10))->applyFromArray($borderstyle); $sheet->getStyle('N'.($k+10))->applyFromArray($borderstyle);        // 设置行高        $sheet->getRowDimension(($k+10))->setRowHeight(22);        // 水平、垂直居中        $sheet->getStyle('B'.($k+10).':N'.($k+10))->applyFromArray($alignstyle);    }} // 并用药品$sheet->setCellValue('A'.($i+1),'并用药品');// 合并单元格$sheet->mergeCells('A'.($i+1).':A'.($i+2));// 水平、垂直居中$sheet->getStyle('A'.($i+1).':A'.($i+2))->applyFromArray($alignstyle);// 设置边框$sheet->getStyle('A'.($i+1).':A'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('B'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('C'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('D'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('E'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('F'.($i+1))->applyFromArray($borderstyle);$sheet->getStyle('G'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('H'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('I'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('J'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('K'.($i+1))->applyFromArray($borderstyle);$sheet->getStyle('L'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('M'.($i+1))->applyFromArray($borderstyle); $sheet->getStyle('N'.($i+1))->applyFromArray($borderstyle);$sheet->getStyle('B'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('C'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('D'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('E'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('F'.($i+2))->applyFromArray($borderstyle);$sheet->getStyle('G'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('H'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('I'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('J'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('K'.($i+2))->applyFromArray($borderstyle);$sheet->getStyle('L'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('M'.($i+2))->applyFromArray($borderstyle); $sheet->getStyle('N'.($i+2))->applyFromArray($borderstyle); // 设置行高$sheet->getRowDimension(($i+1))->setRowHeight(22);$sheet->getRowDimension(($i+2))->setRowHeight(22); // p($i+3);// 不良反应事件名称$sheet->setCellValue('A'.($i+3),'不良反应/事件名称:');$sheet->setCellValue('G'.($i+3),'不良反应/事件发生时间:');$sheet->setCellValue('H'.($i+3),$adrinfo['blfydate']);// 设置边框$sheet->getStyle('A'.($i+3).':F'.($i+3))->applyFromArray($borderstyle);$sheet->getStyle('G'.($i+3).':N'.($i+3))->applyFromArray($borderstyle);// 合并单元格$sheet->mergeCells('B'.($i+3).':F'.($i+3)); // 设置行高$sheet->getRowDimension(($i+3))->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A'.($i+3).':N'.($i+3))->applyFromArray($alignstyle);  // 不良反应过程描述$sheet->setCellValue('A'.($i+4),'不良反应/事件过程描述(包括症状、体征、临床检验等)及处理情况(可附页):');$jiancha_str = '';if (!empty($adrinfo['jiancha'])) {    $jiancha_str = "相关检查检验情况:\r\n";    foreach ($adrinfo['jiancha'] as $v){        $jiancha_str .= "检查日期:".str_replace("日期:","",$v[0]).";".$v[1].";".$v[2].";".$v[3].";".$v[4].";".$v[5].";\r\n";    }}$str = "描述:".$adrinfo['blfyxijie']."。\r\n".$jiancha_str;$sheet->setCellValue('A'.($i+5),$str);$sheet->mergeCells('A'.($i+5).':N'.($i+5));// 设置行高$sheet->getRowDimension($i+5)->setRowHeight(50);// 设置边框$sheet->getStyle('A'.($i+4).':N'.($i+5))->applyFromArray($borderstyle);// 水平、垂直居中// $sheet->getStyle('A'.($i+5).':N'.($i+5))->applyFromArray($alignstyle); // 不良反应/事件的结果:$sheet->setCellValue('A'.($i+6),'不良反应/事件的结果:');// 设置边框$sheet->getStyle('A'.($i+6).':N'.($i+6))->applyFromArray($borderstyle);// 设置行高$sheet->getRowDimension(($i+6))->setRowHeight(22);// 合并单元格// $sheet->mergeCells('B'.($i+6).':N'.($i+6)); // 对原患疾病的影响$sheet->setCellValue('A'.($i+7),'对原患疾病的影响:');// 设置边框$sheet->getStyle('A'.($i+7).':N'.($i+7))->applyFromArray($borderstyle);// 合并单元格$sheet->mergeCells('B'.($i+7).':N'.($i+7));// 设置行高$sheet->getRowDimension(($i+7))->setRowHeight(22); // 关联性评价$sheet->setCellValue('A'.($i+8),'关联性评价');$sheet->mergeCells('A'.($i+8).':A'.($i+9));$sheet->setCellValue('B'.($i+8),'报告人评价:');$sheet->setCellValue('K'.($i+8),'签名:');$sheet->setCellValue('L'.($i+8),$adrinfo['member']['name']);$sheet->setCellValue('B'.($i+9),'报告单位评价:');$sheet->setCellValue('K'.($i+9),'签名:');// 设置边框$sheet->getStyle('A'.($i+8).':N'.($i+9))->applyFromArray($borderstyle);// 水平、垂直居中$sheet->getStyle('A'.($i+8).':B'.($i+9))->applyFromArray($alignstyle);// 设置行高$sheet->getRowDimension(($i+8))->setRowHeight(22);$sheet->getRowDimension(($i+9))->setRowHeight(22); // 报告人信息$sheet->setCellValue('A'.($i+10),'报告人信息');$sheet->mergeCells('A'.($i+10).':A'.($i+11));$sheet->setCellValue('B'.($i+10),'联系电话:');$sheet->setCellValue('C'.($i+10),$adrinfo['member']['tel']);$sheet->setCellValue('F'.($i+10),'职业:');$sheet->setCellValue('I'.($i+10),'报告人科室:');$sheet->setCellValue('B'.($i+11),'电子邮箱:');$sheet->setCellValue('C'.($i+11),$adrinfo['member']['email']);$sheet->setCellValue('F'.($i+11),'签名:');$sheet->setCellValue('G'.($i+11),$adrinfo['member']['name']);$sheet->setCellValue('I'.($i+11),'报告日期:');$sheet->setCellValue('J'.($i+11),date('Y-m-d',$adrinfo['createtime'])); // 设置边框$sheet->getStyle('A'.($i+10).':N'.($i+11))->applyFromArray($borderstyle);// 水平、垂直居中$sheet->getStyle('A'.($i+10).':N'.($i+11))->applyFromArray($alignstyle);// 设置行高$sheet->getRowDimension(($i+10))->setRowHeight(22);$sheet->getRowDimension(($i+11))->setRowHeight(22); // 报告单位信息$sheet->setCellValue('A'.($i+12),'报告单位信息');$sheet->setCellValue('B'.($i+12),'单位名称:');$sheet->setCellValue('C'.($i+12),$adrinfo['member']['danwei']);$sheet->setCellValue('F'.($i+12),'联系人:');$sheet->setCellValue('I'.($i+12),'电话:');// 设置边框$sheet->getStyle('A'.($i+12).':N'.($i+12))->applyFromArray($borderstyle);// 设置行高$sheet->getRowDimension(($i+12))->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A'.($i+12).':N'.($i+12))->applyFromArray($alignstyle); // 备注$sheet->setCellValue('A'.($i+13),'备注');$sheet->setCellValue('B'.($i+13),$adrinfo['qitayaowu']);// 设置边框$sheet->getStyle('A'.($i+13).':N'.($i+13))->applyFromArray($borderstyle);// 设置行高$sheet->getRowDimension(($i+13))->setRowHeight(22);// 水平、垂直居中$sheet->getStyle('A'.($i+13).':N'.($i+13))->applyFromArray($alignstyle); ob_end_clean();     //清除缓冲区,避免乱码 header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // MIME 协议的扩展header('Content-Disposition: attachment;filename="' . iconv("utf-8", "GB2312", $filename) . '.xlsx');// 缓存控制header('Cache-Control:max-age=0');$write = IOFactory::createWriter($spreadsheet, 'Xlsx');$write->save('php://output');
复制代码
四、效果图


以上就是ThinkPHP5+PhpSpreadsheet实现批量导出数据的详细内容,更多关于ThinkPHP5 PhpSpreadsheet导出数据的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/program/328911oby.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具