PHPExel导出报表--导出类

  1 <?php
  2 /*
  3 分页,分栏,分行
  4 $title excel标题
  5 $excelsheet  sheet标题
  6 $field
  7 $data 生成excel的数据
  8 */
  9 class PHPExcelExport
 10 {
 11     function __construct()
 12     {
 13         ;
 14     }
 15     
 16     private static $objPHPExcel = null;
 17     private static $FIELD2SHEETCOLUMN = array();  //导出字段与excel列对照数组
 18     private static $objPhpSheet = null; 
 19     
 20     /*
 21     *创建excel生成表
 22     *@pram ($title=>标题
 23             $field => 列名称
 24             $data => 数据
 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);//创建excel表格
 34         self::setfirstRow(++$sheetindex,$field); //生成首行字段说明
 35         self::setdataRow($data,++$sheetindex);//生成主体内容
 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);//创建excel表格
 51             self::setfirstRow(++$tmp_sheetindex,$field); //生成首行 
 52             self::setdataRow($val,++$tmp_sheetindex);//生成主体内容
 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]);//创建excel表格
 68             self::setfirstRow(++$tmp_sheetindex,$field); //生成首行
 69             self::setdataRow($val,++$tmp_sheetindex);  //生成主体内容
 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);//设置当前的sheet
 94         self::$objPhpSheet = self::$objPHPExcel->getActiveSheet();
 95         self::$objPhpSheet->setTitle($title);//设置当前活动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     *将需要导出的字段转化为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阿拉伯数字转化为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);//创建excel表格
197         self::getphpexcel_instance();
198         self::$objPhpSheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);   //设置对齐方式
199 
200         $line = array('1' => 0 , '2' => '0');
201         self::$objPhpSheet->setCellValue(PHPExcelExport::changeid2abc("1")."1",$title);//设置单元格内容
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 }

 

posted @ 2016-08-25 12:16  多多喜  阅读(502)  评论(0编辑  收藏  举报