正在加载

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条评论)

  1. kazaff on 01月 16th, 2009 8:55 am

    能指点一下么?按照您的代码,我运行后出来的是一个空白页面,什么内容都没有!
    您能分析一下是什么问题么?

    用了其他几个类似函数库,结局都一样!是不是还有其他地方没设置好啊?

    还有“sheet名”的具体含义还有作用是什么?解释一下把~

    [Reply]

  2. 半醒 on 02月 14th, 2009 10:44 am

    sheet名 就是当你打开一个xls文件时,在左下角会有一个sheet名。这个是一定要指定的

    [Reply]

  3. 这么好的文章,为什么要藏起来。 on 10月 13th, 2009 9:52 am

    我用这个文章解决了实际的问题,谢谢!

    [Reply]

  4. ycy on 03月 9th, 2010 11:24 am

    使用这个,多次试验,如果单元内容比较简单,比如:a1,a2,a3… 还能显示,如果复杂一些汉字等格式,就只能显示部分,而且不连续,而且如果再修改为简单的字符,还是不能显示。

    [Reply]

发表评论