欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHPExcel 数据导出实例

程序员文章站 2022-06-11 20:16:46
...

一、getdata.php

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