PHP导出数据到excel文件

下面介绍一个很另类的php导出数据到xls文件的方法,用到的函数有pack,iconv

//上面三个自定义函数很重要,大家自行揣摩
function xlsBOF() {
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
}
function xlsEOF() {
    echo pack("ss", 0x0A, 0x00);
}

function xlsWriteLabel($Row, $Col, $Value) {
    $L = strlen($Value);
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
    echo $Value;
}

//封装的方法,要看原博,请点击文章底部链接
function export(array $head, array $body)
{
    // prepare headers information
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment; filename=\"export_".date("Y-m-d").".xls\"");
    header("Content-Transfer-Encoding: binary");
    header("Pragma: no-cache");
    header("Expires: 0");

    xlsBOF();
    //因为我们的内容一般会有中文,所以表头和表内容都需要预先转码,不然会出现乱码
    //此处用的是逗号分隔,如果内容中含有逗号就会出问题,大家可以换成其他分隔符,或者采用for循环的方式逐行进行转换
    $head_str = iconv('utf-8', 'gbk', implode(',', $head));
    $head_arr = explode(',', $head_str);
    $head_count = count($head_arr);
    for ($i = 0; $i < $head_count; $i++) {
        xlsWriteLabel(0, $i, $head_arr[$i]);
    }
    //body
    $body_count = count($body);
    for ($i = 0; $i < $body_count; $i++) {
        $value = $body[$i];
        $value_str = iconv('utf-8', 'gbk',implode(',', $value));
        $value_arr = explode(',', $value_str);
        for ($j = 0; $j < $head_count; $j++) {
            xlsWriteLabel($i + 1, $j, $value_arr[$j]);
        }
    }
    xlsEOF();
}

//使用方法
$head = ['手机号', '姓名', '昵称'];
$body = [
    [
        '1378949440',
        '张三',
        '张三三'
    ],
    [
        '1399494900',
        '李四',
        '李四四'
    ]
];
export($head, $body);

原博地址-Krasimir

你可能感兴趣的:(PHP导出数据到excel文件)