PHP匯出Excel,親測有用
阿新 • • 發佈:2019-01-08
最近有個專案需要匯出Excel表的功能,上網查了,發現有挺多缺陷的,有些太久遠的了,phpExcel檔案都無法下載,官網都遷移到github上了
第一步
去github下載phpexcel 下載地址
裡面有他的例子和類,其實最主要的就是把裡面的Class這個資料夾下的東西
第二步
直接上程式碼
public function output() {
//匯出商家資訊Excel
$xlsName = "shop";
//此處設定的是excel表的頭部標題那一樣,這塊需要注意log_id,operator這些要和資料庫的欄位對應,操作使用者,操作使用者ip等根據需要自己編輯,和列表的<th></th>一樣就可以
$xlsCell = array(
array('id', 'id'),//key 值需要跟 資料庫的欄位名一致
array('name', '商品名字'),
array('num', '庫存'),
array('money', '原價'),
array('dzmoney', '現價'),
array('fen', '分類'),
array('sub_class', '二級分類'),
array ('danwei', '單位'),
array('date', '時間'),
array('shop_name', '店鋪名字'),
);
$log = D('shuxin')->field('id,name,num,money,dzmoney,fen,sub_class,danwei,date,shop_name')->order('sp_fen asc')->select();
$this->exportExcel($xlsName, $xlsCell, $log);
}
//所有表格匯出模板
public function exportExcel($expTitle, $expCellName, $expTableData) {
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle); //檔名稱
$fileName = '所有商品表' . date('_YmdHis'); //or $xlsTitle 檔名稱可根據自己情況設定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
require_once dirname(__FILE__)."/../Public/php_excel/PHPExcel.php";
// require_once './xiaoshouxitong/Public/excel/PHPExcel.php';
$objPHPExcel = new \PHPExcel();
$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(22);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(22);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(15);
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合併單元格
$objPHPExcel->getActiveSheet()->setCellValue('A1', '商品表')->getStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
for ($i = 0; $i < $cellNum; $i++) {
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for ($i = 0; $i < $dataNum; $i++) {
for ($j = 0; $j < $cellNum; $j++) {
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 3), " ".$expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean(); //清除緩衝區,避免亂碼
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle. '.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新視窗列印inline本視窗列印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
其實最大的問題就是那個引入的路徑問題,在本地測試的和在線上測試的會有所不同,所以我採用了dirname(FILE)這個方法保證地址的一致
其中 require_once dirname(FILE).”/../Public/php_excel/PHPExcel.php”; 中的php_excel就是下載回來的Class資料夾
最後結果
如果需要特別的樣式可以去看PHPExcel的手冊或程式碼,這裡就是個簡單的匯出而已
如果還有疑惑或者什麼問題的歡迎留言
如果沒有請幫我點贊,謝謝,嘻嘻i(^-^)V
首發簡書 歡迎關注 我的簡書
歡迎我的關注公眾號
PHP傳播者
推送最新文章和IT有趣新鮮知識科技