IT俱乐部 PHP ThinkPHP5+PhpSpreadsheet实现批量导出数据

ThinkPHP5+PhpSpreadsheet实现批量导出数据

前言

为什么使用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俱乐部其它相关文章!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/php/13984.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部