PHPExcel 數據導出實例
一、getdata.php
namespace Webadmin\Model; use ExtendSpace\Excel; …… 略 …… // 取出數據 $dataBillArr = $this->get_list_bysql($sql); // 替換數據中的 0 、1 為 是、否 // PHPExcel 有內置的方法處理,但是得到的是 TRUE/FALSE,這里自己處理吧 $this->_formatZero($dataBillArr, array('taxflag', 'payflag', 'removeflag')); // 替換支付狀態 foreach ($dataBillArr as $key => $value) { switch ($value['statustype']) { case '-1': $dataBillArr[$key]['statustype'] = '已取消'; break; case '-2': $dataBillArr[$key]['statustype'] = '已取消 已退款'; break; case '0': $dataBillArr[$key]['statustype'] = '待付款'; break; case '1': $dataBillArr[$key]['statustype'] = '待發貨'; break; case '2': $dataBillArr[$key]['statustype'] = '待收貨'; break; case '3': $dataBillArr[$key]['statustype'] = '已完成'; break; case '10': $dataBillArr[$key]['statustype'] = '退貨完成'; break; case '11': $dataBillArr[$key]['statustype'] = '退款完成'; break; default: $dataBillArr[$key]['statustype'] = '無'; break; } } // 設置要導出的字段及對應的表頭名稱 $header = array( array('title'=>'平臺訂單號', 'field'=>'billcode', 'type'=>'string', 'autosize'=>true), array('title'=>'用戶帳號', 'field'=>'username', 'type'=>'string', 'autosize'=>true), array('title'=>'用戶昵稱', 'field'=>'nickname'), array('title'=>'所屬商家', 'field'=>'shopuser', 'autosize'=>true), array('title'=>'管易ERP單號', 'field'=>'erpsn', 'type'=>'string', 'autosize'=>true), array('title'=>'支付單號', 'field'=>'bspaycode', 'type'=>'string', 'autosize'=>true), array('title'=>'保稅批次號', 'field'=>'bsbatchcode', 'type'=>'string', 'autosize'=>true), array('title'=>'是否跨境', 'field'=>'taxflag'), array('title'=>'訂單狀態', 'field'=>'statustype'), …… 略 …… ); // 調用接口,執行 Excel 生成及導出操作 $filename = '訂單流水表_' . date('Y年m月d日_His', time()); Excel::export($dataBillArr, $header, $filename);
二、Excel.class.php
<?php namespace ExtendSpace; /** * Class Excel 通用 Excel 接口,處理導出、導出操作 * 使用說明: * 一、導入 * 待續 。。。 * 二、導出 * use ExtendSpace\Excel; * ..... * Excel::export($dataArr, $header, $filename); * * @package ExtendSpace * @author xxxxx 2015-08-27 14:07:14 * @version */ class Excel { // private static $objPHPExcel = null; /** * 入口文件:導出 Excel * @return */ public static function export($data, $header, $filename='hms_excel_export') { // 引入 PHPExcel 類庫 import('phpexcel.PHPExcel', dirname(__FILE__) . '/', '.php'); // 這里是 TP 特有,可直接用 include 或 require // 初始化設置 $objPHPExcel = new \PHPExcel(); $objPHPExcel->getProperties()->setCreator('test')->setLastModifiedBy('test'); // 這里設置中文亂碼,還沒解決 // ->setTitle('這是標題') // ->setSubject('這是什么') // ->setDescription('這是描述') // ->setKeywords('這是關鍵字') // ->setCategory('這是目錄么'); // var_dump($objPHPExcel->getProperties());exit; // 獲取當前要操作的活動工作表 $objActSheet = $objPHPExcel->getActiveSheet(); // 寫入表頭 foreach ($header as $k => $v) { $colIndex = self::_getHeaderIndex($k); $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colIndex . '1', $v['title']); // 列是否需要自動適應寬度 if (!empty($v['autosize'])) { $objActSheet->getColumnDimension($colIndex)->setAutoSize(true); } } // 寫入數據,從第二行開始,第一行是表頭 $rowNum = 2; foreach($data as $rows){ // 遍歷數據,獲取一行 foreach($header as $kk => $vv){ // 單元格寫入 $colIndex = self::_getHeaderIndex($kk); // 是否指定單元格數據格式 if (!empty($vv['type'])) { // 是 switch ($vv['type']) { case 'number': $type = \PHPExcel_Cell_DataType::TYPE_NUMERIC; // 數字 break; case 'boolean': $type = \PHPExcel_Cell_DataType::TYPE_BOOL; // 布爾值,0->FALSE;1->TRUE break; default: $type = \PHPExcel_Cell_DataType::TYPE_STRING; // 字符串 break; } $objActSheet->setCellValueExplicit($colIndex.$rowNum, $rows[$vv['field']], $type); } else { // 否,默認常規 $objActSheet->setCellValue($colIndex.$rowNum, $rows[$vv['field']]); } } $rowNum++; } // 設置行高度 rownum // $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22); // 設置字體和樣式 $objActSheet->getDefaultStyle()->getFont()->setSize(12); // 整體字號 $objActSheet->getStyle('A1:' . self::_getHeaderIndex(count($header)) . '1')->getFont()->setBold(true); // 列標題加粗 // 設置工作表名稱 $objActSheet->setTitle('Sheet1'); // 設置 header 頭參數 // header("Pragma: public"); // header("Expires: 0"); // header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); // header("Content-Type:application/force-download"); // header("Content-Type:application/vnd.ms-execl"); // header("Content-Type:application/octet-stream"); // header("Content-Type:application/download");; // header('Content-Disposition:attachment;filename="' . $savedFileName . '"'); // header("Content-Transfer-Encoding:binary"); // 最終輸出 $savedFileName = self::_iconv($filename) . '.xls'; // 導出文件名+擴展名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $savedFileName . '"'); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); // $objWriter->save($savedFileName); } /** * 入口文件:導入 Excel * @return */ public static function import() { // 引入 PHPExcel 類庫 // import('phpexcel.PHPExcel', dirname(__FILE__) . '/', '.php'); } private static function _init() { } /** * 獲取表頭索引值,即:A,B,C...,大于 * @param array $header 用于設置表頭的數組 * @return string */ private function _getHeaderIndex($num) { return \PHPExcel_Cell::stringFromColumnIndex($num); } /** * 字符轉換,避免亂碼 * @param string $str 待處理的字符 * @return string */ private function _iconv($str) { return iconv('utf-8', 'gb2312', $str); } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!