问题背景:

前段时间做毕业设计的时候,客户有一个需求,要求实现上传EXCEL文件,对文件中的数据进行数据库入库。困难的是,要实现EXCEL数据文件的信息排列任意性无错兼容导入。导入过程中发现,PHP读取EXCEL的时候,出现的是ASCII值,而非汉字和字母数字。当然最后循环入库的时候,数据库中的也都是ASCII,于是要对EXCEL文件进行ASCII码值的转换。 (未经转换的)

<tr><td>&#23398&#21495</td><td>&#22995&#21517</td><td>&#24615&#21035</td><td>&#30005&#35805&#21495&#30721</td>

查看 基于PHP的EXCEL的数据导入的 【在线演示】

解决方案:

当用PHP读取数据文件的时候,遇到传入的字符串内含“#&”的时候直接进行decode,否则直接输出,因为如果是纯数字、字母、下划线等符号,读取的是未经过ASCII码转换的。

PHP读取EXCEL(限EXCEL2003)文件的方法:

先加载EXCEL数据处理类,然后配置好相关的参数,文件名,Sheet 名执行读取函数Read_Excel_File,获取返回数据

不知道Sheet名的请看下图

stu_import.jpg - 大小: 57.36 KB - 尺寸: 436 x 327 - 点击打开新窗口浏览全图

<?php  
//加载EXCEL操作类  
require_once './excel_class.php';  
  
//加载EXCEL文件Sheet1名        
$file_sheet = "Sheet1";  
Read_Excel_File("test.xls",$return);  
  
//$return[$file_sheet]返回EXCEL行数  
for ($i=0;$i<count($return[$file_sheet]);$i++)  
{  
    echo "<tr>";  
    for ($j=0;$j<count($return[$file_sheet][$i]);$j++)  
    {  
        echo "<td>".$return[$file_sheet][$i][$j]."</td>";  
    }  
    echo "</tr>";  
}  
?>  

在进行逐行读取EXCEL CELL数据的时候,只要对CELL数据进行ascii类的decode方法就可以了。

<?php  
//这里的$i=0是指定读取起始行数 
for ($i=0;$i<count($return[$file_sheet]);$i++)  
{  
    echo "<tr>";  
    for ($j=0;$j<count($return[$file_sheet][$i]);$j++)  
    {  
        echo "<td>".$ascii->decode($return[$file_sheet][$i][$j])."</td>";  
    }  
    echo "</tr>";  
}  
?>  

相关的操作类如下:

class ascii  
{  
    function decode($str) {  
        $flag = "&#";  
        $pos = strpos($str, $flag);  
        if($pos === FALSE) {  
            return $str;  
        }else{  
            preg_match_all("/([0-9]{2,5})/", $str,$a);  
            $a = $a[0];  
            foreach ($a as $dec){  
                if ($dec < 128) {   
                    $utf .= chr($dec);   
                } else if ($dec < 2048) {   
                    $utf .= chr(192 + (($dec - ($dec % 64)) / 64));   
                    $utf .= chr(128 + ($dec % 64));   
                } else {   
                    $utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));   
                    $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));   
                    $utf .= chr(128 + ($dec % 64));   
                }   
            }  
            return $utf;  
        }     
    }   
}

附件

php-excel-import.rar (15.82 KB, 下载次数:316, 上传时间:2015-01-09 17:51)