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);
    }
}
时间: 2024-10-12 16:42:23

PHPExcel 数据导出实例的相关文章

PHPExcel数据导出到Excel文件

/** * 数据导出到Excel文件 * * @param object $data 要导出的数据内容 * @param object $headArr 设置Excel的头名称 * @param string $fileName 导出的文件名称 * @param string $width 设置单元格的宽度 * * @throws PHPExcel_Exception 异常控制 * @throws PHPExcel_Reader_Exception 控制Excel加载时的异常 * @throws

PHP laravel框架 导入导出excel ,phpexcel数据导出分多个工作区(sheet)

laravel 导入导出有很多 但是你发现等你根据conposer安装excal的时候你发现 他总是不依不饶的提示你: 安装失败 这就是laravel5.4的高明之处了, 下面让我们来看看吧! 1. 在laravel 项目的根目录下 我们会看到 一个composer.json的文件: 打开, 并找到 "maatwebsite/excel": "~2.0.0" 修改为 "~2.1.0" 保存 2. 执行 composer update maatwe

利用PHPExcel将数据导出到xls格式的excel文件

在开发某地的经营许可证管理系统的时候需要将数据导出打excel文件,虽然一年前做某集团的ERP的时候用到过一次导入和导出,但是那时候太忙没时间写博客,一年过去了我也忘的差不多了,所以趁着今天将此次的使用写到博客中,作为以后开发的一个参考,免得再次使用的时候需要导出找资料,也给其他同行一个参考.作者:DragonDean,博客地址:http://www.cnblogs.com/dragondean/ 什么是PHPExcel? PHPExcel 是用来操作Office Excel 文档的一个PHP类

PHPexcel数据按模板导出

1 <?php 2 header("Content-type: text/html; charset=gb2312"); 3 error_reporting(E_ALL); 4 ini_set('display_errors', TRUE); 5 ini_set('display_startup_errors', TRUE); 6 7 define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 8 9 date_de

使用PHPExcel将数据导出至Excel

安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目录,并将其重命名为phpexcel 在项目中需要的地方添加引用 import('phpexcel.PHPExcel', EXTEND_PATH); 代码实现 <?php namespace app\index\controller; use think\Controller; class Excel

yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension? 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 先概括下我们接下来要说的大致内容: 数据列表页面导出excel数据, 1.可以根据GridView的filter进行搜索数据并导出 2.可以自行扩展数据导出的时间直接导出数据 //先来看controller层,接收GridView参数并做拼接处理 php c

PHPExcel导入导出

慕课教程 -- PHPExcel导入导出 一.PHPExcel导出操作 1.快速入门 <?php #找到当前脚本的路径 $dir = dirname(__FILE__); #引入PHPExcel插件文件 require $dir."/excel/PHPExcel.php"; #实例化PHPExcel类 $objPHPExcel = new PHPExcel(); #获得当前活动sheet的操作对象 $objSheet = $objPHPExcel->getActiveShe

使用PHPExcel导入导出excel格式文件

使用PHPExcel导入导出excel格式文件 作者:zccst 由于导出使用较多,下面是导出实现过程. 第一步,将PHPExcel的源代码复制到项目的lib下 文件包括:PHPExcel.php 和 文件夹PHPExcel 源代码见附件 注1:源代码是zip格式,能在windows和linux通用. 注2:PHPExcel.zip是干净代码,可以直接引用.PHPExcel2.zip有svn记录,不适合直接引用. 第二步:在需要导出的handler页面中引用 1,在头部引入三个文件 Php代码 

CloudStack环境重建之数据导出

第一.环境 软件版本 CloudStack 3.0.5+XenServer 6.0.2 硬件设备 管理节点:DELL        R420        10.30.18.2 计算节点:DELL        R720        10.30.18.9 存储节点:DELL        IBM520        10.30.18.4 3.网络环境 网段:10.30.18.0/24 网关:10.30.18.1 DNS:202.194.104.35 4.CloudStack规划 物理服务器网段