摘要: PHPExcel 是用來操做Office Excel 文檔的一個PHP類庫,它基於微軟的OpenXML標準和PHP語言。能夠使用它來讀取、寫入不一樣格式的電子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOf ... PHPExcel 是用來操做Office Excel 文檔的一個PHP類庫,它基於微軟的OpenXML標準和PHP語言。能夠使用它來讀取、寫入不一樣格式的電子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。 要求: PHP 5.2.0 版本及以上 PHP extension php_zip 開啓 (若是你須要使用 PHPExcel 來操做 .xlsx .ods or .gnumeric 文件) PHP extension php_xml 開啓 PHP extension php_gd2 開啓(選填, 若是須要計算準確的列寬須要開啓此擴展) [代碼]php代碼: view sourceprint? 001 public function actionGetexcel() { 002 $objectPHPExcel = new PHPExcel(); 003 004 //設置文檔基本屬性 005 $objProps = $objectPHPExcel->getProperties(); 006 $objProps->setCreator('ls'); //做者 007 $objProps->setLastModifiedBy('ls'); //修訂 008 $objProps->setTitle("Office XLS Document"); //標題 009 $objProps->setSubject("Office XLS Document"); //主題 010 $objProps->setDescription(""); //備註 011 $objProps->setKeywords("office excel"); //標記 012 $objProps->setCategory(""); //類別 013 //設置當前的sheet索引,用於後續的內容操做。 014 //通常只有在使用多個sheet的時候才須要顯示調用。 015 //缺省狀況下,PHPExcel會自動建立第一個sheet被設置SheetIndex=0 016 $objectPHPExcel->setActiveSheetIndex(0); 017 018 //每頁條數 019 $page_size = 20; 020 //數據的取出 021 $model = Company::model(); 022 $model->unsetAttributes(); // clear any default values 023 $model->group_id = 7; 024 $dataProvider = $model->search(); 025 026 $dataProvider->setPagination(false); 027 $data = $dataProvider->getData(); //數據 028 $count = $dataProvider->getTotalItemCount(); //總條數 029 //總頁數的算出 030 $page_count = (int) ($count / $page_size) + 1; 031 $current_page = 0; 032 033 $n = 0; 034 $spm = 0; 035 foreach ($data as $product) { 036 037 if ($n % $page_size === 0) { 038 if ($n) { 039 $objectPHPExcel->createSheet(); 040 $current_page = $current_page + 1; 041 $spm = 0; 042 } 043 //報表頭的輸出 044 $objectPHPExcel->getActiveSheet()->mergeCells('B1:G1'); 045 $objectPHPExcel->getActiveSheet()->setCellValue('B1', '平臺供應商'); 046 047 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('B2', '平臺供應商'); 048 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('B2', '平臺供應商'); 049 $objectPHPExcel->setActiveSheetIndex($current_page)->getStyle('B1')->getFont()->setSize(24); 050 $objectPHPExcel->setActiveSheetIndex($current_page)->getStyle('B1') 051 ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 052 053 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('B2', '日期:' . date("Y年m月j日")); 054 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('G2', '第' . ($current_page + 1) . '/' . $page_count . '頁'); 055 $objectPHPExcel->setActiveSheetIndex($current_page)->getStyle('G2') 056 ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); 057 058 //表格頭的輸出 059 $objectPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(5); 060 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('B3', '公司id'); 061 $objectPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(6.5); 062 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('C3', '名稱'); 063 $objectPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(17); 064 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('D3', '分組'); 065 $objectPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(22); 066 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('E3', '電話'); 067 $objectPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15); 068 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('F3', '建立時間'); 069 $objectPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15); 070 $objectPHPExcel->setActiveSheetIndex($current_page)->setCellValue('G3', '地區'); 071 $objectPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15); 072 073 //設置居中 074 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') 075 ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 076 077 //設置邊框 078 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') 079 ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 080 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') 081 ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 082 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') 083 ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 084 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') 085 ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 086 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') 087 ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 088 089 //設置顏色 090 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3')->getFill() 091 ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF66CCCC'); 092 } 093 094 //由PHPExcel根據傳入內容自動判斷單元格內容類型 setCellValue('A1', '字符串內容'); 095 //顯式指定內容類型 setCellValueExplicit('A1', '字符串內容', PHPExcel_Cell_DataType::TYPE_STRING) 096 097 //明細的輸出 098 $objectPHPExcel->getActiveSheet()->setCellValueExplicit('B' . ($spm + 4), $product->com_id, PHPExcel_Cell_DataType::TYPE_STRING); 099 $objectPHPExcel->getActiveSheet()->setCellValueExplicit('C' . ($spm + 4), $product->com_name, PHPExcel_Cell_DataType::TYPE_STRING); 100 $objectPHPExcel->getActiveSheet()->setCellValueExplicit('D' . ($spm + 4), $product->group_id,PHPExcel_Cell_DataType::TYPE_STRING); 101 $objectPHPExcel->getActiveSheet()->setCellValueExplicit('E' . ($spm + 4), $product->com_phone,PHPExcel_Cell_DataType::TYPE_STRING); 102 $objectPHPExcel->getActiveSheet()->setCellValueExplicit('F' . ($spm + 4), $product->create_time,PHPExcel_Cell_DataType::TYPE_STRING); 103 $objectPHPExcel->getActiveSheet()->setCellValueExplicit('G' . ($spm + 4), $product->region_name,PHPExcel_Cell_DataType::TYPE_STRING); 104 //設置邊框 105 $currentRowNum = $spm + 4; 106 $objectPHPExcel->getActiveSheet()->getStyle('B' . ($spm + 4) . ':G' . $currentRowNum) 107 ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 108 $objectPHPExcel->getActiveSheet()->getStyle('B' . ($spm + 4) . ':G' . $currentRowNum) 109 ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 110 $objectPHPExcel->getActiveSheet()->getStyle('B' . ($spm + 4) . ':G' . $currentRowNum) 111 ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 112 $objectPHPExcel->getActiveSheet()->getStyle('B' . ($spm + 4) . ':G' . $currentRowNum) 113 ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 114 $objectPHPExcel->getActiveSheet()->getStyle('B' . ($spm + 4) . ':G' . $currentRowNum) 115 ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 116 $n = $n + 1; 117 $spm +=1; 118 } 119 120 //設置分頁顯示 121 // $objectPHPExcel->getActiveSheet()->setBreak( 'I55' , PHPExcel_Worksheet::BREAK_ROW ); 122 //$objectPHPExcel->getActiveSheet()->setBreak( 'I10' , PHPExcel_Worksheet::BREAK_COLUMN ); 123 $objectPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true); 124 $objectPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(true); 125 126 127 ob_end_clean(); 128 ob_start(); 129 130 header('Content-Type : application/vnd.ms-excel'); 131 header('Content-Disposition:attachment;filename="' . '供應商列表-TEST' . date("Y年m月j日") . '.xls"'); 132 $objWriter = PHPExcel_IOFactory::createWriter($objectPHPExcel, 'Excel5'); 133 $objWriter->save('php://output'); 134 }