zoukankan      html  css  js  c++  java
  • thinkphp中使用PHPEXCEL导出数据

    thinkphp中导出二维数组到Excel

    1.解决时间长度导致EXCEL出现###问题  

    2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型

    代码如下:

    <?php
    /**
     * Author lizhaoyao
     * Add_Time:2015-08-26
     * [php_excel_export 用户导出Excel]
     * @param  array  $data       [含有表头的数组]
     * @param  string $file_name  [要保存的文件名]
     * @param  string $sheet_name [工作表名称]
     * @return [type]             [返回Excel]
     */
    function php_excel_export($data=array(),$file_name='',$sheet_name='导出记录')
    {
        if($file_name==""){$file_name=time();}//如果没有给名称 默认为当前时间戳
        Vendor('Classes.PHPExcel');//导入扩展类
        $objPHPExcel = new PHPExcel();//实例化PHPExcel
        $data_key=array_keys($data);//取出二维数组的第一个元素
        $keys_list=array_keys($data[$data_key[0]]);//取出二维数组第一个数组的所有key
        //为什么这么做  为什么不用$data[0]? 因为该方法未知用户传入的data是何种数组 如果是关联数组 $data[0]将失效且报警告
        /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
        foreach($data as $k => $v)
        {
            $num=$k+1;//定义起始符
            $middle_obj=$objPHPExcel->setActiveSheetIndex(0);//获取第一个工作表
            $start_column='A';//定义起始列为A
            foreach ($keys_list as $key => $value)
            {
                $objPHPExcel->getActiveSheet()->setCellValueExplicit($start_column.$num, $v[$value],PHPExcel_Cell_DataType::TYPE_STRING);//循环着给第几列赋值 并把长数值型变为文本型输出 解决导出形成科学记数法的瑕疵
                //在excel中  列是以 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF……这样的形式增加的
                //而字符串的增加正好符合这一规律 这也意味着 我们可以用字符串的自增来当作列
                $objPHPExcel->getActiveSheet()->getColumnDimension($start_column)->setWidth(280);//设置每列宽度为280
                $start_column++;//将列自增
            }
        }
        $objPHPExcel->getActiveSheet()->setTitle($sheet_name);//设置sheet工作表名称
        $objPHPExcel->setActiveSheetIndex(0);//设置表头
        header('Content-Type: application/vnd.ms-excel');//输出头信息
        header('Content-Disposition: attachment;filename="'.$file_name.'.xls"');//设置xls文件名称
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//创建输出
        $objWriter->save('php://output');exit();//保存输出到下载
    }
    ?>

    此方法用到字符串加加的形式 入A++变为B Z++变为AA的原理 需要深刻理解字符串自增才行

  • 相关阅读:
    hdu 2822 Dogs (BFS+优先队列)
    hdu 2757 Ocean Currents(BFS+DFS)
    hdu2844 Coins(普通的多重背包 + 二进制优化)
    hdu1495 && pku3414
    hdu1054 Strategic Game(树形DP)
    FckEditor V2.6 fckconfig.js中文注释
    数字文本控件
    统计在线用户列表 for .net WebForm
    智能客户端
    模拟Confirm的Web自定义控件
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/4765466.html
Copyright © 2011-2022 走看看