php excel reader - 忽略带有特殊符号的单元格

标签 php excel csv xls export-to-csv

我使用解析器将 xls 转换为 csv http://code.google.com/p/php-excel-reader/

<?php    
set_time_limit(300);
require_once 'excel_reader2.php';    
$data = new Spreadsheet_Excel_Reader("file.xls", false, 'UTF-8');    

$f = fopen('file.csv', 'w');    
for($row = 1; $row <= $data->rowcount(); $row++)    
{    
    $out = '';    
    for($col = 1; $col <= $data->colcount(); $col++)    
    {    
        $val = $data->val($row,$col);

        // escape " and \ characters inside the cell    
        $escaped = preg_replace(array('#”#u', '#\\\\#u', '#[”"]#u'), array('"', '\\\\\\\\', '\"'), $val);    
        if(empty($val))    
            $out .= ',';    
        else    
            $out .= '"' . $escaped . '",';    
    }
    // remove last comma (,)    
    fwrite($f, substr($out, 0, -1));    
    fwrite($f, "\n");
}
fclose($f);

?>

出于某种奇怪的原因,它会跳过带有特殊符号(如 ° 或 ®)的单元格。如何修复?

最佳答案

utf8_decodehtml_entity_decode 对我有用:

<?php    
set_time_limit(300);
require_once 'excel_reader2.php';    
$data = new Spreadsheet_Excel_Reader("file.xls", false, 'UTF-8');    

$f = fopen('file.csv', 'w');    
for($row = 1; $row <= $data->rowcount(); $row++)    
{    
    $out = '';    
    for($col = 1; $col <= $data->colcount(); $col++)    
    {    
        $val = $data->val($row,$col);

        // escape " and \ characters inside the cell    
        $escaped = preg_replace(array('#”#u', '#\\\\#u', '#[”"]#u'), array('"', '\\\\\\\\', '\"'), $val);    
        $escaped = utf8_decode($escaped);
        //$escaped = html_entity_decode($escaped);
        if(empty($val))    
            $out .= ',';    
        else    
            $out .= '"' . $escaped . '",';    
    }
    // remove last comma (,)    
    fwrite($f, substr($out, 0, -1));    
    fwrite($f, "\n");
}
fclose($f);

?>

输出:

"1","2","3","4","5"
"a","b","c","d","e"
"6","7","°","9","10"
"q","w","e","r","t"
"®","12","13","14","15"
"z","x","c","v","b"

关于php excel reader - 忽略带有特殊符号的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28692848/

相关文章:

arrays - 从数组中删除重复项 - vba

python - 避免将列表存储为 pandas 中的字符串

javascript - 如何使用 PapaParse 从文件中解析 CSV?

php - 在 php 中使用 @ 而不是 isset

php - 换行文本 - 使用 php 不区分大小写

php - Paypal 付款的奇怪问题

python - 如何从 CSV 文件中获取每列而不是行的平均值?

php - 加入两个 MYSQL 数据库表并检查第二个表是否没有记录然后返回 FALSE,如果列有一些特定值则也返回 FALSE

excel - getElementsByTagName 和未声明的命名空间

excel - 在 Excel 中为多个查询共享数据库连接?