Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHPExcel 数据导出实例

PHPExcel 数据导出实例

WBOY
WBOYasal
2016-07-25 08:42:351090semak imbas

一、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


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:PHP敏感字过滤代码 Artikel seterusnya:PHP 下载远程文件