用户
 找回密码
 入住 CI 中国社区
搜索
查看: 894|回复: 0
收起左侧

[数据库] CI 3.1.9 使用xlsxwriter.class.php轻松导出数据到Excel

[复制链接]
发表于 2018-12-10 14:36:34 | 显示全部楼层 |阅读模式
本帖最后由 mijun 于 2018-12-10 15:05 编辑

网上有PHPExcel导出,我也曾经用这个类库导出,但是碰到数据量比较大(>5000)的时候,导出速度不是很理想,后面又继续寻找其他的可以替代PHPExcel的,发现确实有,而且还很简单,还是开源的。GitHub上有,https://github.com/mk-j/PHP_XLSXWriter,据说是PHPExcel团队的人写的。1、首先在上面的那个网址下载好xlsxwriter.class.php。
2、放在application\libraries目录下,更名为xlsxwriter.php。
3、在application\controllers目录下新建控制文件
PHP复制代码
<?php
 
    class C_export_excel extends CI_Controller
    {
        //
 
        function export_excel($data)
        {
            $fpxx = $data;
            $this->load->library('xlsxwriter.php');  //直接载入类
            $fields = $fpxx->list_fields();  //取查询结果的字段列表
            $rows = $fpxx->result_array();   //查询结果转换为数组
            foreach ($fields as $field) {    //这段是把前面的字段列表全部指定为字符型,如果要单独设置,就用下面注释的那段
                $header[$field] = 'string';
            }
 
            /*$headers = Array(
                'xh' => 'string',
                'sbh' => 'string',
                'mc' => 'string',
                'rdrq' => 'date',
                'djrq' => 'date',
                'je' =>'0.00',
                'dm' => 'string',
                'fx_lx' => 'string',
                'nd' => 'string'
            );*/

 
 
            $objPHPExcel = new XLSXWriter();
            // Field names in the first row
            //p($fields);die;
 
            $objPHPExcel->writeSheetHeader('sheet1', $header); //写excel文件标题栏,单独设置的用$headers
            // Fetching the table data
            foreach ($rows as $data) {
                $objPHPExcel->writeSheetRow('sheet1', $data);   //填充数据
            }
            header('Content-Type:application/vnd.ms-excel');
            header('Content-Disposition:attachment;filename="Excel_' . date('Y-m-d H:i:s') . '.xlsx"');//导出成2007格式
            header('Cache-Control:max-age=0');
            $objPHPExcel->writeToStdOut('php://output');
        }
 
        function export_fpxx()
        {
            set_time_limit(0);// 加入脚本无限期执行控制,担心时间长了脚本直接被中止了。
            $data['fplx'] = $this->uri->segment(4);// uri的参数传递
            $data['nd'] = $this->uri->segment(5); // uri的参数传递
            $data['ny'] = $this->uri->segment(6); // uri的参数传递
            $this->load->model('m_gt3_fpxx', 'fpxx'); ///查询数据结果
            $fpxx = $this->fpxx->fpxx_list($data); //获取结果
            $this->export_excel($fpxx); //交给上面的处理即可导出,速度很快,目前我使用的最快的。10w大概10秒左右。
 
        }
 
 
    }
 
 
复制代码


4 调用,就直接 c_export_excel/exprot_fpxx/ 按照上面的export_excel中的三个参数传递后,即可导出数据到excel文件中。

5、请教一下,连接oracle查询出来的数据怎么利用CI的分页类,一直用的rownum来处理,当数据在50万以上查询就比较慢了,有什么比较好的办法解决这个问题吗





本版积分规则