当前位置:Gxlcms > PHP教程 > PHPExcel数据导出实例

PHPExcel数据导出实例

时间:2021-07-01 10:21:17 帮助过:32人阅读

一、getdata.php

  1. namespace Webadmin\Model;
  2. use ExtendSpace\Excel;
  3. ……
  4. 略
  5. ……
  6. // 取出数据
  7. $dataBillArr = $this->get_list_bysql($sql);
  8. // 替换数据中的 0 、1 为 是、否
  9. // PHPExcel 有内置的方法处理,但是得到的是 TRUE/FALSE,这里自己处理吧
  10. $this->_formatZero($dataBillArr, array('taxflag', 'payflag', 'removeflag'));
  11. // 替换支付状态
  12. foreach ($dataBillArr as $key => $value) {
  13. switch ($value['statustype']) {
  14. case '-1':
  15. $dataBillArr[$key]['statustype'] = '已取消';
  16. break;
  17. case '-2':
  18. $dataBillArr[$key]['statustype'] = '已取消 已退款';
  19. break;
  20. case '0':
  21. $dataBillArr[$key]['statustype'] = '待付款';
  22. break;
  23. case '1':
  24. $dataBillArr[$key]['statustype'] = '待发货';
  25. break;
  26. case '2':
  27. $dataBillArr[$key]['statustype'] = '待收货';
  28. break;
  29. case '3':
  30. $dataBillArr[$key]['statustype'] = '已完成';
  31. break;
  32. case '10':
  33. $dataBillArr[$key]['statustype'] = '退货完成';
  34. break;
  35. case '11':
  36. $dataBillArr[$key]['statustype'] = '退款完成';
  37. break;
  38. default:
  39. $dataBillArr[$key]['statustype'] = '无';
  40. break;
  41. }
  42. }
  43. // 设置要导出的字段及对应的表头名称
  44. $header = array(
  45. array('title'=>'平台订单号', 'field'=>'billcode', 'type'=>'string', 'autosize'=>true),
  46. array('title'=>'用户帐号', 'field'=>'username', 'type'=>'string', 'autosize'=>true),
  47. array('title'=>'用户昵称', 'field'=>'nickname'),
  48. array('title'=>'所属商家', 'field'=>'shopuser', 'autosize'=>true),
  49. array('title'=>'管易ERP单号', 'field'=>'erpsn', 'type'=>'string', 'autosize'=>true),
  50. array('title'=>'支付单号', 'field'=>'bspaycode', 'type'=>'string', 'autosize'=>true),
  51. array('title'=>'保税批次号', 'field'=>'bsbatchcode', 'type'=>'string', 'autosize'=>true),
  52. array('title'=>'是否跨境', 'field'=>'taxflag'),
  53. array('title'=>'订单状态', 'field'=>'statustype'),
  54. ……
  55. 略
  56. ……
  57. );
  58. // 调用接口,执行 Excel 生成及导出操作
  59. $filename = '订单流水表_' . date('Y年m月d日_His', time());
  60. Excel::export($dataBillArr, $header, $filename);


二、Excel.class.php

  1. namespace ExtendSpace;
  2. /**
  3. * Class Excel 通用 Excel 接口,处理导出、导出操作
  4. * 使用说明:
  5. * 一、导入
  6. * 待续 。。。
  7. * 二、导出
  8. * use ExtendSpace\Excel;
  9. * .....
  10. * Excel::export($dataArr, $header, $filename);
  11. *
  12. * @package ExtendSpace
  13. * @author xxxxx 2015-08-27 14:07:14
  14. * @version
  15. */
  16. class Excel {
  17. // private static $objPHPExcel = null;
  18. /**
  19. * 入口文件:导出 Excel
  20. * @return
  21. */
  22. public static function export($data, $header, $filename='hms_excel_export') {
  23. // 引入 PHPExcel 类库
  24. import('phpexcel.PHPExcel', dirname(__FILE__) . '/', '.php'); // 这里是 TP 特有,可直接用 include 或 require
  25. // 初始化设置
  26. $objPHPExcel = new \PHPExcel();
  27. $objPHPExcel->getProperties()->setCreator('test')->setLastModifiedBy('test'); // 这里设置中文乱码,还没解决
  28. // ->setTitle('这是标题')
  29. // ->setSubject('这是什么')
  30. // ->setDescription('这是描述')
  31. // ->setKeywords('这是关键字')
  32. // ->setCategory('这是目录么');
  33. // var_dump($objPHPExcel->getProperties());exit;
  34. // 获取当前要操作的活动工作表
  35. $objActSheet = $objPHPExcel->getActiveSheet();
  36. // 写入表头
  37. foreach ($header as $k => $v) {
  38. $colIndex = self::_getHeaderIndex($k);
  39. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colIndex . '1', $v['title']);
  40. // 列是否需要自动适应宽度
  41. if (!empty($v['autosize'])) {
  42. $objActSheet->getColumnDimension($colIndex)->setAutoSize(true);
  43. }
  44. }
  45. // 写入数据,从第二行开始,第一行是表头
  46. $rowNum = 2;
  47. foreach($data as $rows){ // 遍历数据,获取一行
  48. foreach($header as $kk => $vv){ // 单元格写入
  49. $colIndex = self::_getHeaderIndex($kk);
  50. // 是否指定单元格数据格式
  51. if (!empty($vv['type'])) { // 是
  52. switch ($vv['type']) {
  53. case 'number':
  54. $type = \PHPExcel_Cell_DataType::TYPE_NUMERIC; // 数字
  55. break;
  56. case 'boolean':
  57. $type = \PHPExcel_Cell_DataType::TYPE_BOOL; // 布尔值,0->FALSE;1->TRUE
  58. break;
  59. default:
  60. $type = \PHPExcel_Cell_DataType::TYPE_STRING; // 字符串
  61. break;
  62. }
  63. $objActSheet->setCellValueExplicit($colIndex.$rowNum, $rows[$vv['field']], $type);
  64. } else { // 否,默认常规
  65. $objActSheet->setCellValue($colIndex.$rowNum, $rows[$vv['field']]);
  66. }
  67. }
  68. $rowNum++;
  69. }
  70. // 设置行高度 rownum
  71. // $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);
  72. // 设置字体和样式
  73. $objActSheet->getDefaultStyle()->getFont()->setSize(12); // 整体字号
  74. $objActSheet->getStyle('A1:' . self::_getHeaderIndex(count($header)) . '1')->getFont()->setBold(true); // 列标题加粗
  75. // 设置工作表名称
  76. $objActSheet->setTitle('Sheet1');
  77. // 设置 header 头参数
  78. // header("Pragma: public");
  79. // header("Expires: 0");
  80. // header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
  81. // header("Content-Type:application/force-download");
  82. // header("Content-Type:application/vnd.ms-execl");
  83. // header("Content-Type:application/octet-stream");
  84. // header("Content-Type:application/download");;
  85. // header('Content-Disposition:attachment;filename="' . $savedFileName . '"');
  86. // header("Content-Transfer-Encoding:binary");
  87. // 最终输出
  88. $savedFileName = self::_iconv($filename) . '.xls'; // 导出文件名+扩展名
  89. header('Content-Type: application/vnd.ms-excel');
  90. header('Content-Disposition: attachment;filename="' . $savedFileName . '"');
  91. header('Cache-Control: max-age=0');
  92. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  93. $objWriter->save('php://output');
  94. // $objWriter->save($savedFileName);
  95. }
  96. /**
  97. * 入口文件:导入 Excel
  98. * @return
  99. */
  100. public static function import() {
  101. // 引入 PHPExcel 类库
  102. // import('phpexcel.PHPExcel', dirname(__FILE__) . '/', '.php');
  103. }
  104. private static function _init() {
  105. }
  106. /**
  107. * 获取表头索引值,即:A,B,C...,大于
  108. * @param array $header 用于设置表头的数组
  109. * @return string
  110. */
  111. private function _getHeaderIndex($num) {
  112. return \PHPExcel_Cell::stringFromColumnIndex($num);
  113. }
  114. /**
  115. * 字符转换,避免乱码
  116. * @param string $str 待处理的字符
  117. * @return string
  118. */
  119. private function _iconv($str) {
  120. return iconv('utf-8', 'gb2312', $str);
  121. }
  122. }



PHPExcel

人气教程排行