PHPExel导出报表--导出类
生活随笔
收集整理的這篇文章主要介紹了
PHPExel导出报表--导出类
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 <?php
2 /*
3 分頁,分欄,分行
4 $title excel標題
5 $excelsheet sheet標題
6 $field
7 $data 生成excel的數(shù)據(jù)
8 */
9 class PHPExcelExport
10 {
11 function __construct()
12 {
13 ;
14 }
15
16 private static $objPHPExcel = null;
17 private static $FIELD2SHEETCOLUMN = array(); //導出字段與excel列對照數(shù)組
18 private static $objPhpSheet = null;
19
20 /*
21 *創(chuàng)建excel生成表
22 *@pram ($title=>標題
23 $field => 列名稱
24 $data => 數(shù)據(jù)
25 $sheetindex => 第幾個工作表)
26 *
27 */
28 public static function getexportsheet($title,$field,$data,$sheetindex=0)
29 {
30 set_time_limit(0);
31 self::getphpexcel_instance();//引入phpExcel.php 并且實例化
32 self::field2sheetcolumn($firstcolumid=1,$field);
33 self::createSheet(0,$title);//創(chuàng)建excel表格
34 self::setfirstRow(++$sheetindex,$field); //生成首行字段說明
35 self::setdataRow($data,++$sheetindex);//生成主體內(nèi)容
36 self::save_export($title);//生成文件
37 }
38
39 public static function getcolumnexport($title,$field,$data,$sheetindex=0,$columntitle)
40 {
41 self::getphpexcel_instance();
42 $cloumn_length = count($field);
43 $firstcolumid=1;
44 $k = 0;
45 foreach($data as $key=> $val)
46 {
47 $tmp_sheetindex = $sheetindex;
48 $firstcolumid = $firstcolumid + $cloumn_length * $k;
49 field2sheetcolumn($firstcolumid=1,$field);
50 self::createSheet(0,$title);//創(chuàng)建excel表格
51 self::setfirstRow(++$tmp_sheetindex,$field); //生成首行
52 self::setdataRow($val,++$tmp_sheetindex);//生成主體內(nèi)容
53 $k++;
54 }
55 self::save_export($title);//生成文件
56 }
57
58
59 public static function getpageexport($title,$field,$data,$sheetindex=0,$pagetitle)
60 {
61 self::getphpexcel_instance();
62 self::field2sheetcolumn($firstcolumid=1,$field);
63 $cloumn_length = count($field);
64 foreach($data as $key=> $val)
65 {
66 $tmp_sheetindex = $sheetindex;
67 self::createSheet(0,$pagetitle[$key]);//創(chuàng)建excel表格
68 self::setfirstRow(++$tmp_sheetindex,$field); //生成首行
69 self::setdataRow($val,++$tmp_sheetindex); //生成主體內(nèi)容
70 }
71 self::save_export($title);//生成文件
72 }
73
74 public static function getcolumnpageexport()
75 {
76 }
77
78 private static function getphpexcel_instance()
79 {
80 if(self::$objPHPExcel == null)
81 {
82 require_once 'phpexcel/PHPExcel.php';
83 require_once 'phpexcel/PHPExcel/Writer/Excel5.php';
84 self::$objPHPExcel = new PHPExcel();
85 }
86 return self::$objPHPExcel;
87 }
88
89 public static function createSheet($sheetindex,$title)
90 {
91 self::getphpexcel_instance();
92 self::$objPHPExcel->createSheet();
93 self::$objPHPExcel->setActiveSheetIndex($sheetindex);//設(shè)置當前的sheet
94 self::$objPhpSheet = self::$objPHPExcel->getActiveSheet();
95 self::$objPhpSheet->setTitle($title);//設(shè)置當前活動sheet的名稱
96 }
97
98 /**
99 *function @merge cells
100 * @param int $columnfrom Start with column number
101 * @param int $columnto end with column number
102 *@param int $linefrom Start with line number
103 * @param int $lineto end with line number
104 * @param string $celval After the merger of cell'value
105 */
106
107 public static function mergecel($columnfrom,$columnto,$linefrom,$lineto,$celval)
108 {
109 self::getphpexcel_instance();
110 $columnfrom = self::changeid2abc($columnfrom);
111 $columnto = self::changeid2abc($to);
112 $objPhpSheet->setCellValue($columnfrom.$linefrom, $celval);
113 $objPhpSheet->mergeCells($linefrom . $linefrom . ":" . $columnto . $lineto);
114 }
115
116 /**
117 * static save excel
118 *
119 * @param string $title excel title
120 * @param bool $isoutput2brower excel output way (The browser or is saved to the server)
121 * @param string $path excel is saved to the server's path
122 */
123
124 public static function save_export($title , $isoutput2brower=true , $path='')
125 {
126 $objWriter = new PHPExcel_Writer_Excel5(self::$objPHPExcel);
127 $outputFileName = $title."(" . date('Y-m-d') . ").xls";
128 if($isoutput2brower) {
129 header("Content-Type: application/force-download");
130 header("Content-Type: application/octet-stream");
131 header("Content-Type: application/download");
132 header('Content-Disposition:inline;filename="' . iconv('UTF-8', 'GBK', $outputFileName).'"');
133 header('Content-Type: application/vnd.ms-excel');
134 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
135 header("Pragma: no-cache");
136 $objWriter->save('php://output');
137 } else {
138 $objWriter->save($path.$outputFileName);
139 }
140 }
141
142 /**
143 *function Setting field line
144 *@param int $k line number
145 *@param array $field field array
146 */
147 public static function setfirstRow($k,$field)
148 {
149 self::getphpexcel_instance();
150 foreach($field as $key=> $val) {
151 self::$objPhpSheet->setCellValue(self::$FIELD2SHEETCOLUMN[$key] . $k, $val);
152 }
153 }
154
155 public static function setdataRow($data,$dataindex)
156 {
157 self::getphpexcel_instance();
158 foreach($data as $key=> $val) {
159 foreach($val as $k => $v) {
160 if(isset(self::$FIELD2SHEETCOLUMN[$k])) {
161 self::$objPhpSheet->setCellValue(self::$FIELD2SHEETCOLUMN[$k] . $dataindex, ' '.$v);
162 }
163 }
164 $dataindex++;
165 }
166 }
167
168 /**
169 *將需要導出的字段轉(zhuǎn)化為excel列ABCD
170 *@para $firstcolumid=>起始列 默認從第一列開始
171 */
172 public static function field2sheetcolumn($firstcolumid=1,$field)
173 {
174 foreach($field as $key=> $val)
175 {
176 self::$FIELD2SHEETCOLUMN[$key] = PHPExcelExport::changeid2abc($firstcolumid++);
177 }
178 }
179
180 /**
181 * @desc阿拉伯數(shù)字轉(zhuǎn)化為excel單元格
182 */
183 public static function changeid2abc($n)
184 {
185 $n = $n >= 1 && $n <= 255 ? strval($n) : '';
186 if(empty($n)){return false;}
187 $s = $n > 26 ? chr(intval(($n - 1)/26)+64) : '';
188 $g = chr((($n - 1) % 26) + 65);
189 return $s.$g;
190 }
191
192 //推廣回收報表
193 public function makeExcel($title,$field2name,$fieldArr,$data)
194 {
195 self::getphpexcel_instance();
196 self::createSheet(0,$title);//創(chuàng)建excel表格
197 self::getphpexcel_instance();
198 self::$objPhpSheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //設(shè)置對齊方式
199
200 $line = array('1' => 0 , '2' => '0');
201 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc("1")."1",$title);//設(shè)置單元格內(nèi)容
202 self::$objPhpSheet->mergeCells("A1:U1" );//合并單元格
203 foreach ($fieldArr as $_key => $_field) {
204 if (is_array($_field)) {
205 $line[1] += 1;
206 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($line[1])."2",$field2name[$_key]);
207 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($line[1])."2" . ":" .PHPExcelExport::changeid2abc($line[1]+count($_field)-1)."2" );
208 $num = 0;
209 foreach ($_field as $_key2 => $_val) {
210 if ($num >0) {
211 $line[1] += 1;
212 }
213 $num ++;
214 $line[2] += 1;
215 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($line[2])."3",$field2name[$_key.'_'.$_val]);
216 }
217 } else {
218 $line[1] += 1;
219 $line[2] += 1;
220 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($line[1])."2" . ":" .PHPExcelExport::changeid2abc($line[1])."3" );
221 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($line[1])."2",$field2name[$_field]);
222 }
223 }
224 $except = array('week1','week2','week3','week4', 'week5', 'week6');
225 $line = array('1' => 3 , '2' => '0');
226 if ($data) {
227 foreach ($data as $key=>$item) {
228 $line[1] += 1;
229 $line[2] = 0;
230 foreach ($field2name as $k=>$_item) {
231 if (!in_array($k,$except)) {
232 $line[2] += 1;
233 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($line[2]).$line[1],$item[$k]);
234 }
235 }
236 }
237 }
238 self::save_export($title);//生成文件
239 }
240
241 //廣告分析報表 2016/5/23
242 public function adAnalysisExcel ($title, $fieldName, $fieldArr, $valName, $data, $flag)
243 {
244 self::getphpexcel_instance();
245 self::createSheet(0,$title);
246 $c1 = 0; $c2=0;
247 //短期評價 ps:沒有30天ROI
248 if ($flag == 0 ) {
249 foreach ($fieldArr as $key => $val) {
250 if (is_array($val)) {
251 $c1++;
252 $num1 = count($val);
253 $num2 = count($val, COUNT_RECURSIVE);
254 if ($num1 == $num2) {
255 $num = $num2;
256 } else {
257 $num = $num2-$num1;
258 }
259 if (isset($c3) && $c3 == 20) {
260 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c3) . '1' . ':' . PHPExcelExport::changeid2abc(23) . '1');
261 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c3) . '1','廣告使用情況');
262 } else {
263 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c1) . '1' . ':' . PHPExcelExport::changeid2abc($num+$c2) . '1');
264 foreach ($fieldName as $_key => $_val) {
265 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c1) . '1',$fieldName[$key]);
266 }
267
268 }
269 $tip = 0;
270 foreach ($val as $k => $v) {
271 $tip2 = 0;
272 if (is_array($v)) {
273 $c2++;$c3 = $c2; //16
274 //三層的第二層的合并
275 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c2) . '2' . ':' . PHPExcelExport::changeid2abc($c2+1) . '2');
276 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c2) . '2', $fieldName[$k]);
277 foreach ($v as $x => $y) {
278 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c3) . '3',$fieldName[$y]);
279 if ($tip2 >0) {
280 $c1 += 1;
281 $c2++;
282 }
283 $c3++;
284 $tip2++;
285 }
286 } else {
287 if ($tip >0) {
288 $c1 += 1;
289 }
290 $tip++;
291 $c2++;
292 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c2) . '2' . ':' . PHPExcelExport::changeid2abc($c2) . '3');
293 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c2) . '2',$fieldName[$v]);
294 }
295 }
296 } else {
297 $c1++;
298 $c2++;
299 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c1) . '1' . ':' . PHPExcelExport::changeid2abc($c1) . '3');
300 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c1) . '1', '廣告名稱');
301 }
302 }
303 $line = array('1' => '3', '2' => '0');
304
305 if ($data) {
306 foreach ($data as $key=>$item) {
307 $line[1] += 1;
308 $line[2] = 0;
309 foreach ($valName as $k=>$_item) {
310 $line[2] += 1;
311 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($line[2]).$line[1],$item[$k]);
312 }
313 }
314 }
315 self::save_export($title);//生成文件
316 }
317 //長期評價 ps:有30天ROI這項
318 if ($flag == 1) {
319 foreach ($fieldArr as $key => $val) {
320 if (is_array($val)) {
321 $c1++;
322 $num1 = count($val);
323 $num2 = count($val, COUNT_RECURSIVE);
324 if ($num1 == $num2) {
325 $num = $num2;
326 } else {
327 $num = $num2-$num1;
328 }
329 if (isset($c3) && $c3 == 21) {
330 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c3) . '1' . ':' . PHPExcelExport::changeid2abc(24) . '1');
331 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c3) . '1','廣告使用情況');
332 } else {
333 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c1) . '1' . ':' . PHPExcelExport::changeid2abc($num+$c2) . '1');
334 foreach ($fieldName as $_key => $_val) {
335 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c1) . '1',$fieldName[$key]);
336 }
337
338 }
339 $tip = 0;
340 foreach ($val as $k => $v) {
341 $tip2 = 0;
342 if (is_array($v)) {
343 $c2++;$c3 = $c2; //16
344 //三層的第二層的合并
345 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c2) . '2' . ':' . PHPExcelExport::changeid2abc($c2+1) . '2');
346 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c2) . '2', $fieldName[$k]);
347 foreach ($v as $x => $y) {
348 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c3) . '3',$fieldName[$y]);
349 if ($tip2 >0) {
350 $c1 += 1;
351 $c2++;
352 }
353 $c3++;
354 $tip2++;
355 }
356 } else {
357 if ($tip >0) {
358 $c1 += 1;
359 }
360 $tip++;
361 $c2++;
362 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c2) . '2' . ':' . PHPExcelExport::changeid2abc($c2) . '3');
363 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c2) . '2',$fieldName[$v]);
364 }
365 }
366 } else {
367 $c1++;
368 $c2++;
369 self::$objPhpSheet->mergeCells(PHPExcelExport::changeid2abc($c1) . '1' . ':' . PHPExcelExport::changeid2abc($c1) . '3');
370 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($c1) . '1', '廣告名稱');
371 }
372 }
373 $line = array('1' => '3', '2' => '0');
374
375 if ($data) {
376 foreach ($data as $key=>$item) {
377 $line[1] += 1;
378 $line[2] = 0;
379 foreach ($valName as $k=>$_item) {
380 $line[2] += 1;
381 self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc($line[2]).$line[1],$item[$k]);
382 }
383 }
384 }
385 self::save_export($title);//生成文件
386 }
387 }
388 }
?
轉(zhuǎn)載于:https://www.cnblogs.com/duoduoxi/p/5806294.html
總結(jié)
以上是生活随笔為你收集整理的PHPExel导出报表--导出类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows server 2008系
- 下一篇: [Python]网络爬虫(九):百度贴吧