PHP輸出Excel PHPExcel
阿新 • • 發佈:2019-01-26
方法1:
/**
* 建立(匯出)Excel資料表格
* @param array $list 要匯出的陣列格式的資料
* @param string $filename 匯出的Excel表格資料表的檔名
* @param array $header Excel表格的表頭
* @param array $index $list陣列中與Excel表格表頭$header中每個專案對應的欄位的名字(key值)
* 比如: $header = array('編號','姓名','性別','年齡');
* $index = array('id' ,'username','sex','age');
* $list = array(array('id'=>1,'username'=>'YQJ','sex'=>'男','age'=>24));
* @return [array] [陣列]
*/
function createtable($list,$filename,$header=array(),$index = array()){
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=" .$filename.".xls");
$teble_header = implode("\t",$header);
$strexport = $teble_header."\r";
foreach ($list as $row){
foreach($index as $val){
$strexport.=$row[$val]."\t";
}
$strexport.="\r";
}
$strexport=iconv('UTF-8' ,"GB2312//IGNORE",$strexport);
exit($strexport);
}
此方法程式碼量少,可以放在thinkPHP5中的公共函式common.php中,方便呼叫,但是對輸出的Excel表格無法設定屬性
方法2:
首先需要到下載SDK,GitHub下載地址,下載後解壓,我們只需要裡邊的Classes資料夾,將其改名為PHPExcel。我這裡是基於thinkPHP5的,可以放置在app同級目錄的extend中。
/*
PHPExcel
*/
public function excel(){
Loader::import('PHPExcel.PHPExcel'); //thinkphp5載入類庫
$objPHPExcel = new \PHPExcel(); //例項化PHPExcel類,
$objSheet = $objPHPExcel->getActiveSheet(); //獲取當前活動的sheet物件
$objSheet->setTitle("test"); //給當前活動sheet起個名稱
/*字串方式填充資料,開發中可以將資料庫取出的資料根據具體情況遍歷填充*/
$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分數")->setCellValue("C1","班級"); //填充資料
// $objSheet->setCellValue("A2","張三")->setCellValue("B2","3434346354634563443634634634563")->setCellValue("C2","一班"); //填充資料
$objSheet->setCellValue("A2","張三")->setCellValueExplicit("B2","123216785321321321312",\PHPExcel_Cell_DataType::TYPE_STRING)->setCellValue("C2","一班");//填充資料時新增此方法,並且使用getNumberFormat方法和setFormatCode方法設定,可以讓如訂單號等長串數字不使用科學計數法
/*陣列方式填充資料*/
$arr = [
[], //空出第一行,打印出的效果將空出第一行
['','資訊'], //空出第一列,打印出的效果將空出第一列
['',"姓名\nname",'年齡','性別','分數','年級'], //空出第一列,*這裡的\n是為了*配合setWrapText自動換行
['','李四','33','男','33543653456346363646','4'],
['','李四','33','男','54546456456447478548','4'],
['','李四','33','男','56635374658465632545','5'],
['','李四','33','男','87473457856856745646','5'],
['','李四','33','男','32','7'],
['','李四','33','男','98','5'],
];
$objSheet->fromArray($arr); //填充陣列資料,較為消耗資源且閱讀不便,不推薦
/*樣式配置資訊--方法配置*/
$objSheet->mergecells("B2:F2"); //合併單元格
$objSheet->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//設定excel檔案預設水平垂直方向居中,垂直setVertical,水平setHorizontal,因為是基於thinkPHP5所以這裡PHPExcel_Style_Alignment前使用"\"引入
$objSheet->getDefaultStyle()->getFont()->setSize(14)->setName("微軟雅黑");//設定所有預設字型大小和格式
$objSheet->getStyle("B2:F2")->getFont()->setSize(20)->setBold(true);//設定指定範圍內字型大小和加粗
$objSheet->getDefaultRowDimension()->setRowHeight(33);//設定所有行預設行高
$objSheet->getRowDimension(2)->setRowHeight(50);//設定指定行(第二行)行高
$objSheet->getStyle("B2:F2")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('EEC591');//指定填充背景顏色,不需要加"#"定義樣式陣列,字型,背景,邊框等都此方法設定,這裡展示邊框
$objSheet->getStyle("B3")->getAlignment()->setWrapText(true);//設定文字自動換行,要用getStyle()方法選中範圍,同時要在內容中新增"\n",而且該內容要用雙引號才會解析
$objSheet->getStyle("E")->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);//設定某列單元格格式為文字格式,便於禁用科學計數法
/*陣列配置*/
$styleArray = array(
'borders' => array(
'outline' => array(
'style' => \PHPExcel_Style_Border::BORDER_THICK,
'color' => array('rgb' => 'EE0000'),
),
),
);
$objSheet->getStyle("B3:G3")->applyFromArray($styleArray);//設定指定區域的邊框,設定邊框必須要使用getStyle()選中範圍
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');//生成objWriter物件,Excel2007(xlsx)為指定格式,還有Excel5表示Excel2003(xls)
/*瀏覽器檢視,瀏覽器儲存*/
self::browser_excel('Excel2007','test.xlsx');//輸出到瀏覽器,引數1位Excel型別可為Excel5和Excel2007,第二個引數為檔名(需加字尾名),此方法為自定義
$objWriter->save("php://output"); //save()裡可以直接填寫儲存路徑
/*儲存到知道路徑*/
$objWriter->save(ROOT_PATH."excel.xlsx"); //save()裡可以直接填寫儲存路徑
}
自定義的瀏覽器header設定方法
/*
瀏覽器開啟時設定header頭
$type excel版本型別 Excel5---Excel2003, Excel2007
$filename 輸出的檔名
*/
function browser_excel($type,$filename){
if($type=="Excel5"){
header('Content-Type: application/vnd.ms-excel');//告訴瀏覽器將要輸出excel03檔案
}else{
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告訴瀏覽器資料excel07檔案
}
header('Content-Disposition: attachment;filename="'.$filename.'"');//告訴瀏覽器將輸出檔案的名稱,要是沒有設定,會把當前檔名設定為名稱
header('Cache-Control: max-age=0');//禁止快取
}
想要獲取更完善的配置資訊,百度PHPExcel中文文件有很多參考資料