最近总是从数据库导入导出数据到excel中,但是PHP 操作excel有一点小麻烦,于是就导入,出csv了。Microsoft Excel也能打开csv,这是极好的!!!

在这记录一下,遇到的坑:

1:首先是编码问题,导入时发现,总是乱码,通过iconv这个函数便能轻易解决乱码问题:

$data = eval('return ' . iconv('gbk', 'utf-8', var_export($data, true)) . ';');
2:导入时发现用txt文本编辑器打开导出的csv不乱码,正常,但是用excel打开就乱码了,这时因为没有写入bom头的问题,在写入数据前先写入bom头:
fwrite($errFile, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM防止乱码
最后一个完整实例代码:
<?php

$inputFilePath = $argv[1];
if (!file_exists($inputFilePath)) {
    die('文件不存在' . PHP_EOL);
}

$csvFile = fopen($inputFilePath, 'r');
$errFilePath = dirname($inputFilePath) . '/shop_error.csv';
if (file_exists($errFilePath)) {
    unlink($errFilePath);
}
//生成错误记录文件
$csv_header = ['品牌id', '商铺名', '经度', '纬度', '地址', '联系电话', '联系人', '商户id', '街道地址码', '营业时间', '第三方商铺id', '账号', '开发id', '导入失败原因'];
$errFile = fopen($errFilePath, 'a');
fwrite($errFile, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM防止乱码
$header = implode(',', $csv_header) . PHP_EOL;
fwrite($errFile, $header);

$header = true;


while ($data = fgetcsv($csvFile)) {
    if (!$header) {
        // 防止乱码
        $data = eval('return ' . iconv('gbk', 'utf-8', var_export($data, true)) . ';');
        
        try {
            // 插入数据库的代码,,扒拉扒拉一大堆。。。。
            echo '导入成功 shop_id= :' . $res['shop_id'] . PHP_EOL;
        } catch (Exception $e) {
            // 写入错误记录
            $data[] = $e->getMessage() . '(不能为空)';
            $content = implode(',', $data) . PHP_EOL;
            fwrite($errFile, $content);
            echo '导入记录有误:' . $e->getMessage() . '(不能为空)' . PHP_EOL;
        }
    } else {
        $header = false;
    }
}

fclose($errFile);
fclose($csvFile);

echo 'over' . PHP_EOL;

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!