| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
11年前发布

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