前言
为什么使用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 2 3 4 5 6 7 8 9 10 11 12 | use PhpOfficePhpSpreadsheetSpreadsheet; use PhpOfficePhpSpreadsheetWriterXlsx; use PhpOfficePhpSpreadsheetIOFactory; use PhpOfficePhpSpreadsheetStyleAlignment; use PhpOfficePhpSpreadsheetStyleBorder; use PhpOfficePhpSpreadsheetStyleFill; use PhpOfficePhpSpreadsheetWorksheetDrawing; //实例化 $spreadsheet = new Spreadsheet(); // 获取工作表 $sheet = $spreadsheet ->getActiveSheet(); |
这里引用了多个PhpSpreadsheet类,下面介绍每个类的作用
1、Spreadsheet:工作表
2、WriterXlsx:导出excel
3、IOFactory:导出excel
4、StyleAlignment:设置单元格文字水平、垂直居中
5、StyleBorder:设置单元格边框样式
6、StyleFill:设置单元格背景颜色
7、WorksheetDrawing:写入图片
2、 设置单元格的值
把单元格A1的值设置为药品不良反应事件报告表
1 | $sheet ->setCellValue( 'A1' , '药品不良反应事件报告表' ); |
3、合并单元格
把单元格A1到N1合并
1 | $sheet ->mergeCells( 'A1:N1' ); |
4、拆分单元格
1 | $sheet ->unmergeCells( 'A1:A4' ); |
5、单元格文字样式
可以设置某一区域的单元格,也可以设置一行或一个单元格的样式
1 2 3 4 5 6 | // 字体大小 $sheet ->getStyle( 'A1' )->getFont()->setSize(12); // 文字加粗 $sheet ->getStyle( 'A1:N1' )->getFont()->setBold(true); // 字体设置 $sheet ->getStyle( 'A1:N1' )->getFont()->setName( '黑体' ); |
6、单元格文字水平、垂直居中
给单元格A1中的文字设置水平、垂直居中。需要注意的是需要引用StyleAlignment
1 2 3 4 5 6 7 8 9 10 11 | use PhpOfficePhpSpreadsheetStyleAlignment; // 水平、垂直居中 $alignstyle = [ 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中 'vertical' => Alignment::VERTICAL_CENTER, //垂直居中 ], ]; $sheet ->getStyle( 'A1' )->applyFromArray( $alignstyle ); |
7、单元格边框样式
给单元格A4到B4加边框,可以单独设置上、下、左、右、全面边框,需要引用StyleBorder
1 2 3 4 5 6 7 8 9 10 11 12 | use PhpOfficePhpSpreadsheetStyleBorder; // 边框样式 $borderstyle = [ 'borders' => [ 'outline' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => [ 'argb' => '000000' ], ], ], ]; $sheet ->getStyle( 'A4:B4' )->applyFromArray( $borderstyle ); |
8、设置单元格背景颜色
给单元格A4设置背景颜色,需要引用StyleFill
1 2 3 | use PhpOfficePhpSpreadsheetStyleFill; $sheet ->getStyle( 'A4' )->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB( 'D9D9D9' ); |
9、设置行高
1 2 3 4 5 | // 第一行行高设置为30 $sheet ->getRowDimension(1)->setRowHeight(30); // 设置默认行高 $sheet ->getDefaultRowDimension()->setRowHeight(20); |
10、设置列宽
1 2 3 4 5 | // 设置A列的列宽 $sheet ->getColumnDimension( 'A' )->setWidth(15); // 设置所有单元格的列宽 $sheet ->getDefaultColumnDimension()->setWidth( '15' ); |
11、设置文字颜色
setRGB:颜色值带#号
setARGB:颜色值不带#号
1 2 3 4 | $sheet ->getStyle( 'B3' )->getFont()->getColor()->setRGB( '#AEEEEE' ); $sheet ->getStyle( 'B3' )->getFont()->getColor()->setARGB( 'FFFF0000' ); |
12、设置超链接
给单元格E6中的文字设置超链接
1 2 | $sheet ->setCellValue( 'E6' , '百度' ); $sheet ->getCell( 'E6' )->getHyperlink()->setUrl( 'www.baidu.com' ); |
13、设置sheet的标题
1 2 | // 设置sheet名称 $sheet ->setTitle( 'ADR报告' ); |
14、使用函数
SUM:求和
VERAGE:平均数
MIN:最小值
MAX:最大值
1 | $sheet ->setCellValue( 'A3' , '=SUM(A1:A2)' ); |
15、写入图片
往单元格里写入图片,需要引用WorksheetDrawing
1 2 3 4 5 6 7 8 9 | use PhpOfficePhpSpreadsheetWorksheetDrawing; //写入图片 $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
1 2 3 4 5 6 7 8 9 10 | use PhpOfficePhpSpreadsheetIOFactory; // 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
1 2 3 4 5 6 7 8 9 10 11 | use PhpOfficePhpSpreadsheetIOFactory; // 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' ); |
三、完整实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 | $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 = "相关检查检验情况:rn" ; foreach ( $adrinfo [ 'jiancha' ] as $v ){ $jiancha_str .= "检查日期:" . str_replace ( "日期:" , "" , $v [0]). ";" . $v [1]. ";" . $v [2]. ";" . $v [3]. ";" . $v [4]. ";" . $v [5]. ";rn" ; } } $str = "描述:" . $adrinfo [ 'blfyxijie' ]. "。rn" . $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导出数据的资料请关注IT俱乐部其它相关文章!