收藏本站 Archiver
    请 后使用快捷导航
    没有账号?入住 CI 中国社区
    查看: 3164|回复: 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万以上查询就比较慢了,有什么比较好的办法解决这个问题吗





    返回列表
    您需要登录后才可以回帖 登录 | 入住 CI 中国社区

    本版积分规则

    AltStyle によって変換されたページ (->オリジナル) /