一、getdata.php namespaceWebadmin\Model;useExtendSpace\Excel;……略……//取出数据$dataBillArr=$this-get_list_bysql($sql);//替换数据中的0、1为是、否//PHPExcel有内置的方法处理,但是得到的是TRUE/FALSE,这里
一、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); } }