PHP读取Excel
Microsoft的东西就是烂,最近又要干嘛验证盗版用户,结果居然是用户在使用过程中,会出现黑屏一小时的情况,汗。不开源,对其操作也麻烦了很多,尤其是目前使用较多的Excel,大部分人在记录信息的时候都会使用,很方便,但再要对其操作的时候就麻烦了很多,比如我们要将Excel里的信息存入到数据库中的时候,要去读取Excel就很麻烦,网上也有很成功的类文件可以直接使用,这里就一个类使用说明一下,这个也是我刚使用的一个,还不错。
首先先下载该类文件:excel_class.zip
函数说明
读取Excel文件 function Read_Excel_File($ExcelFile,$Result)
$ExcelFile Excel文件名
$Result 返回的结果
函数返回值 正常返回0,否则返回错误信息
返回的值数组
$result[sheet名][行][列] 的值为相应Excel Cell的值
建立Excel文件 function Create_Excel_File($ExcelFile,$Data)
$ExcelFile Excel文件名
$Data Excel表格数据
请把函数写在PHP脚本的开头
使用很简单,就读取Excel文件举个例子:
<? require "excel_class.php"; Read_Excel_File("Book1.xls",$return); for ($i=0;$i<count($return[Sheet1]);$i++) { for ($j=0;$j<count($return[Sheet1][$i]);$j++) { echo $return[Sheet1][$i][$j]."|"; } echo "<br>"; } ?>
问题:直接将读得的数据输出,是没问题的,但在插入到数据库的时候可能会出现因编码不同而出现的乱码情况。
解决方法:
function recode($str){
$str = preg_replace("|&#([0-9]{1,5})|", "\".u2utf82gb(\\1).\"", $str);
$str = "\$str=\"$str\";";
eval($str);
return $str;
}
function u2utf82gb($c){
$str="";
if ($c < 0x80) {
$str.=($c-0x30);
} else if ($c < 0x800) {
$str.=chr(0xC0 | $c>>6);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
$str.=chr(0xE0 | $c>>12);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str.=chr(0xF0 | $c>>18);
$str.=chr(0x80 | $c>>12 & 0x3F);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return iconv('UTF-8', 'GB2312', $str);
}
对读取的数据$return[Sheet1][$i][$j] recode一下,即recode($return[Sheet1][$i][$j]);这样在插入到数据库的时候就不会出现乱码情况了。
评论(4条评论)
发表评论
能指点一下么?按照您的代码,我运行后出来的是一个空白页面,什么内容都没有!
您能分析一下是什么问题么?
用了其他几个类似函数库,结局都一样!是不是还有其他地方没设置好啊?
还有“sheet名”的具体含义还有作用是什么?解释一下把~
[Reply]
sheet名 就是当你打开一个xls文件时,在左下角会有一个sheet名。这个是一定要指定的
[Reply]
我用这个文章解决了实际的问题,谢谢!
[Reply]
使用这个,多次试验,如果单元内容比较简单,比如:a1,a2,a3… 还能显示,如果复杂一些汉字等格式,就只能显示部分,而且不连续,而且如果再修改为简单的字符,还是不能显示。
[Reply]