CI 3.1.9 使用xlsxwriter.class.php轻松导出数据到Excel
本帖最后由 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
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万以上查询就比较慢了,有什么比较好的办法解决这个问题吗
页:
[1]