一、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 - 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);
- }
- }
|