php数据导出

/**
 * 导出Excel数据表格
 * @param  string $expTitle 文件标题
 * @param  array $expCellName 表头二维数组
 *                 如:$expCellName = [['id', '序号'], ['name', '姓名'], ['sex', '性别']]
 * @param  array $expTableData 数据二维数组,
 *                 如:$expTableData = [['id' => 1, 'name' => 'ViViYong', 'sex' => 'man'],['id' => 2, 'name' => 'Yong', 'sex' => 'man']]
 */
function exportExcel($expTitle, $expCellName, $expTableData) {
    // 引入PHPExcel
    require_once '../vendor/PHPExcel/Classes/PHPExcel.php';
    //文件名称
    $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);
    $fileName = $xlsTitle;

    // 计算表头和内容的长度
    $cellNum = count($expCellName);
    $dataNum = count($expTableData);

    $objPHPExcel = new \PHPExcel();
    $cellName = array('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', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

    for ($i = 0; $i < $cellNum; $i++) {
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '1', $expCellName[$i][1]);
    }
    // Miscellaneous glyphs, UTF-8
    for ($i = 0; $i < $dataNum; $i++) {
        for ($j = 0; $j < $cellNum; $j++) {
            $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 2), $expTableData[$i][$expCellName[$j][0]]);
        }
    }
    header('pragma:public');
    header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xlsx"');
    header("Content-Disposition:attachment;filename=$fileName.xlsx");//attachment新窗口打印inline本窗口打印
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('php://output');
    exit;
}

/**
 * 导出csv
 * @param string $fileName 输出的文件名
 * @param array $header 第一行,列名,如:['序号', '姓名', '性别']
 * @param array $data 要导出的数据,二维数组,如:[[1, '唐大勇', '男'], [2, 'ViViYong', '男']]
 */
function exportCsv($fileName, $header = array(), $data = array()) {
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
    header('Cache-Control: max-age=0');

    //打开PHP文件句柄,php://output 表示直接输出到浏览器
    $fp = fopen('php://output', 'a');

    //输出Excel列名信息
    foreach ($header as $key => $value) {
        //CSV的Excel支持GBK编码,一定要转换,否则乱码
        $header[$key] = iconv('utf-8', 'gbk', $value);
    }
    //将数据通过fputcsv写到文件句柄
    fputcsv($fp, $header);

    //计数器
    $num = 0;

    //每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
    $limit = 100000;

    //逐行取出数据,不浪费内存
    $count = count($data);
    for ($i = 0; $i < $count; $i++) {
        $num++;
        //刷新一下输出buffer,防止由于数据过多造成问题
        if ($limit == $num) {
            ob_flush();
            flush();
            $num = 0;
        }
        $row = $data[$i];
        foreach ($row as $key => $value) {
            $row[$key] = iconv('utf-8', 'gbk', $value);
        }
        fputcsv($fp, $row);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值