【PhpSpreadsheet】ThinkPHP5+PhpSpreadsheet实现批量导出数据

目录

前言

一、安装

二、API使用

三、完整实例

四、效果图


前言

为什么使用PhpSpreadsheet?

由于PHPExcel不再维护,所以建议使用PhpSpreadsheet来导出exlcel,但是PhpSpreadsheet由于是个新的类库,所以只支持PHP7.1及以上的版本。

PhpSpreadsheet有哪些功能?

PhpSpreadsheet提供了丰富的API,包括单元格设置、文档属性、图片、日期、函数等,基本满足项目需求。

先介绍如何安装和使用常用的AIP,实例代码放在最后,如果想直接使用可直接跳到第三部分完整实例。

一、安装

使用compose安装PhpSpreadsheet,在项目根目录下执行命令,PhpSpreadsheet会安装到/vendor/下

composer require phpoffice/phpspreadsheet

二、API使用

1、引用和实例化

使用composer安装完成后,可在项目中直接使用PhpSpreadsheet。

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;//实例化
$spreadsheet = new Spreadsheet();
// 获取工作表
$sheet = $spreadsheet->getActiveSheet();

这里引用了多个PhpSpreadsheet类,下面介绍每个类的作用

1、\Spreadsheet:工作表

2、\Writer\Xlsx:导出excel

3、\IOFactory:导出excel

4、\Style\Alignment:设置单元格文字水平、垂直居中

5、\Style\Border:设置单元格边框样式

6、\Style\Fill:设置单元格背景颜色

7、\Worksheet\Drawing:写入图片

2、 设置单元格的值

把单元格A1的值设置为药品不良反应事件报告表

$sheet->setCellValue('A1', '药品不良反应事件报告表');

3、合并单元格

把单元格A1到N1合并

$sheet->mergeCells('A1:N1');

4、拆分单元格


$sheet->unmergeCells('A1:A4');

5、单元格文字样式

可以设置某一区域的单元格,也可以设置一行或一个单元格的样式

// 字体大小
$sheet->getStyle('A1')->getFont()->setSize(12);
// 文字加粗
$sheet->getStyle('A1:N1')->getFont()->setBold(true);
// 字体设置
$sheet->getStyle('A1:N1')->getFont()->setName('黑体');

6、单元格文字水平、垂直居中

给单元格A1中的文字设置水平、垂直居中。需要注意的是需要引用Style\Alignment

use PhpOffice\PhpSpreadsheet\Style\Alignment;// 水平、垂直居中
$alignstyle = ['alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中'vertical' => Alignment::VERTICAL_CENTER, //垂直居中],
];$sheet->getStyle('A1')->applyFromArray($alignstyle);

7、单元格边框样式

给单元格A4到B4加边框,可以单独设置上、下、左、右、全面边框,需要引用\Style\Border

use PhpOffice\PhpSpreadsheet\Style\Border;
// 边框样式
$borderstyle = ['borders' => ['outline' => ['borderStyle' => Border::BORDER_THIN,'color' => ['argb' => '000000'],],],
];$sheet->getStyle('A4:B4')->applyFromArray($borderstyle);

8、设置单元格背景颜色

给单元格A4设置背景颜色,需要引用\Style\Fill

use PhpOffice\PhpSpreadsheet\Style\Fill;$sheet->getStyle('A4')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('D9D9D9'); 

9、设置行高

// 第一行行高设置为30
$sheet->getRowDimension(1)->setRowHeight(30);// 设置默认行高
$sheet->getDefaultRowDimension()->setRowHeight(20);

10、设置列宽

// 设置A列的列宽
$sheet->getColumnDimension('A')->setWidth(15);// 设置所有单元格的列宽
$sheet->getDefaultColumnDimension()->setWidth('15');

11、设置文字颜色

setRGB:颜色值带#号

setARGB:颜色值不带#号


$sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE');$sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');

12、设置超链接

给单元格E6中的文字设置超链接

$sheet->setCellValue('E6', '百度');
$sheet->getCell('E6')->getHyperlink()->setUrl('www.baidu.com');

13、设置sheet的标题

// 设置sheet名称
$sheet->setTitle('ADR报告');

14、使用函数

SUM:求和

VERAGE:平均数

MIN:最小值

MAX:最大值

$sheet->setCellValue('A3', '=SUM(A1:A2)');

15、写入图片

往单元格里写入图片,需要引用\Worksheet\Drawing

use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
//写入图片
$drawing = new Drawing();
$drawing->setName('Logo')->setDescription('Logo')->setPath('../files/1.jpg')->setHeight(30)->setCoordinates('D6')->setOffsetX(50)->setOffsetY(6);
$drawing->setRotation(25);
$drawing->getShadow()->setVisible(true);
$drawing->getShadow()->setDirection(45);$drawing->setWorksheet($sheet);

16、导出xlsx文件

需要引用IOFactory

use PhpOffice\PhpSpreadsheet\IOFactory;// MIME 协议,文件的类型,不设置,会默认html
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');

17、导出xls文件

需要引用IOFactory

use PhpOffice\PhpSpreadsheet\IOFactory;// MIME 协议,文件的类型,不设置,会默认html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
// MIME 协议的扩展
$filename = date('Y-m-d').'工作报告单';
header('Content-Disposition:attachment;filename='.$filename .'.xls');
// 缓存控制
header('Cache-Control:max-age=0');
$write = IOFactory::createWriter($spreadsheet, 'Xls');
$write->save('php://output');

三、完整实例


$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');

四、效果图

如果想使用PHPExcel来导入或导出数据,可以参看

【PHPExcel】Thinkphp5+PHPExcel实现批量上传表格数据-CSDN博客

【PHPExcel】使用PHPExcel实现数据批量导出为excel表格-CSDN博客

【PHPExcel】使用PHPExcel实现数据批量导入到数据库-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—RAID5阵列上层Linux操作系统中节点损坏的数据恢复案例

服务器数据恢复环境: 一台服务器上有一组由5块硬盘(4块数据盘1块热备盘)组建的raid5阵列。服务器安装Linux Redhat操作系统,运行一套基于oracle数据库的OA系统。 服务器故障: 这组raid5阵列中一块磁盘离线&#xff0c…

观测云 AI 助手上线:智能运维,从此触手可及!

在当前的云原生时代,运维的复杂性和数据的爆炸式增长给企业带来了前所未有的挑战。为了帮助企业高效应对这些挑战,观测云自豪地推出了 AI 助手——智能化的运维助手,让每位用户都能轻松驾驭复杂的可观测性场景。 01 你身边的 PE 助手&#x…

《重置MobaXterm密码并连接Linux虚拟机的完整操作指南》

目录 引言 一、双击MobaXterm_Personal_24.2进入,但是忘记密码。 那么接下来请跟着我操作。 二、点击此链接,重设密码。 三、下载完成后,现在把这个exe文件解压。注意解压要与MobaXterm_Personal_24.2.exe在同一目录下哦,不然…

vim编辑器交换文件的产生与处理方法

文章目录 问题附图交换文件的作用和产生原因报错信息解读解决方法恢复文件使用命令行删除在文件管理器中删除在文本编辑器中处理 问题附图 简要分析 这个报错信息是由 vim 编辑器产生的,它表明在你尝试打开文件 /opt/software/openGauss/clusterconfig.xml 时&#…

megatron训练gpt

一 安装docker环境 NVIDIA/Megatron-LM: Ongoing research training transformer models at scale (github.com) 1.1 拉镜像 docker pull nvcr.io/nvidia/pytorch:24.08-py3 1.2 下载megatron git clone https://github.com/NVIDIA/Megatron-LM.git 切换为tag 为core 6的版…

MyBatis实践:提高持久层数据处理效率

文章目录 1 Mybatis简介1.1 简介1.2 持久层框架对比 2 快速入门2.1 准备数据库2.2 项目搭建2.3 依赖导入2.4 准备MyBatis配置文件2.5 实体类准备2.6 准备Mapper接口和MapperXML文件2.7 运行和测试 3. 核心配置文件4. MyBatis进阶使用4.0 以包为单位,引入所有的映射文…

一次性入门三款分布式定时任务调度框架:Quartz、ElasticJob3.0、xxl-job

分布式定时任务调度框架(文末有源码) 前言1、Quartz1.1 数据库1.2 maven依赖1.3 代码实现1.3.1 创建一个job1.3.1 为job设置trigger 1.4 配置文件1.5 启动、测试1.1 单机1.2 集群 2、ElasticJob2.1 下载zk2.2 新建三个类型的作业2.3 配置文件2.4 启动项目…

Nature?拿捏~

之前有分享过很多《Nature》论文插图,想着为大家提供更加广阔的作图思路。 但有人说,这些图好看是好看,可惜也就大佬们能画,跟我这个小卡拉米没啥关系。 此言差矣。 如果我说,Matlab就能画呢? 比如&…

AIGC助力小学生编程梦:C++入门不再难!

文章目录 一、AIGC时代下的编程教育新趋势二、小学生C入门趣味编程的意义三、小学生C入门趣味编程的实践策略四、面临的挑战与应对策略五、AIGC技术在小学生C编程中的应用与前景《小学生C趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容(…

C++初阶——入门

目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…

10月9日

肯定是对x求导 刨根问底求导数解析式 区间再现均值不等式 没利用B-E 0 同解方程组 趋于0的时候,看1次项 没有考虑x -1的情况 还要加一,非齐次解

MongoDB如何查找数据以及条件运算符使用的详细说明

以下是关于MongoDB如何查找数据以及条件运算符使用的详细说明: 查找数据的基本方法 在MongoDB中,使用db.collection.find()方法来查找集合中的数据。如果不添加任何条件,直接使用db.collection.find()会返回集合中的所有文档。例如&#xf…

生成两张找不同的图片,仅有一处差异,并且这个差异要不明显且复杂,使得寻找难度增加。

生成两张找不同的图片,仅有一处差异,并且这个差异要不明显且复杂,使得寻找难度增加。 为此,我们需要调整之前的代码,使得差异更为隐蔽。之前的代码中,我们直接在第二张图片中添加了一个红色多边形&#xf…

AdaTAD(CVPR 2024)视频动作检测方法详解

前言 论文:End-to-End Temporal Action Detection with 1B Parameters Across 1000 Frames 代码:AdaTAD 从论文标题可以看出,AdaTAD 可以在 1B 参数且输入视频在 1000 帧的情况下实现端到端的训练,核心创新点是引入 Temporal-Inf…

如何快速学会盲打

今天就来给大家分享一下如何快速学会盲打 盲打的基本方法和步骤 手指放置:将双手放在键盘上,左手食指放在F键上,右手食指放在J键上,其他手指分别放在相邻的键位上。熟悉键盘布局:学习26个字母的位置,以及…

Python Q-learning 算法详解与应用案例

目录 Python Q-learning 算法详解与应用案例引言一、Q-learning 的基本原理1.1 强化学习基础1.2 Q值及其更新1.3 Q-learning 的特性 二、Python 中 Q-learning 的面向对象实现2.1 QTable 类的实现2.2 Environment 类的实现2.3 Agent 类的实现 三、案例分析3.1 简单环境中的 Q-l…

STM32_实验4_控制蜂鸣器

1.设置 PB2 引脚,生成代码。 2.打开蜂鸣器 // 循环反复HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); // 开启蜂鸣器printf("beep on\n");HAL_Delay(500); // 等待响500msHAL_GPIO_WritePin(…

解锁C++多态的魔力:灵活与高效的编码艺术(下)

文章目录 前言🎱四、多态的原理🔮4.1 虚函数表(vtable)🔮4.2 派生类对象中的虚函数表4.2.1 编写程序去访问虚函数表4.2.2 虚表存储位置的验证 🎱五、 多态的静态绑定和动态绑定🔮5.1 静态绑定&a…

【Linux】深入 Linux 进程等待机制:阻塞与非阻塞的奥秘

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1. 为什么需要进行进程等待2. 进程等待的方法2…

spring底层原理

本文参考黑马程序员的spring底层讲解,想要更详细的可以去看视频。 另外文章会每日更新,大概持续1个月!!!每天更新一讲 这部分比较抽象,要经常复习!!! 一、BeanFactory与A…