天生我才必有用

使用PHP读取Excel文件

Posted in PHP    作者:Ray    2009年十一月20日

可能这应该算得上一个很古老的问题,解决的也有多种多样,不过Internet上比较多的是Excel的保存的范例,所以写一篇如何读取Excel,可能对大家有所帮助。

  1. 使用COM接口调用,把Excel应用程序作为一个Server,PHP间接使用Excel来读取文件。
  2. 使用PHPExcel的程序包。它的优点不单单读取资料而且可以保存资料为Excel文件,同时还支持Excel 2007的格式。方法就是把Excel看作一个普通的Excel文件读取。
  3. 还有一种是PHP Excel Reader,它把Excel文件看作一个二进制文件读取,不过不支持新版本Excel文件。

方法2可能看起来不错,不过当你在读取资料大比较大的文件时,会有一个致命的缺点:内存溢出。因为它必须把整个Excel读入内存。有点像XML的DOM接口,不清楚是否有类型XML的SAX的方法。

方法3有类似方法2内存溢出的问题,同时对新版的支持较差。

方法1应该是属于非常传统的方式,只有支持COM程序接口就可。同时只有你能用当前安装的Excel打开此文件,你就可以通过COM接口读取文件。缺点就是你必须在你的电脑上安装Excel。不过对于大文件现在只能使用这个方法。

$doc = "test.xls" ;
$excel_app = new COM("Excel.Application", NULL, CP_UTF8) or die ("Please install the Excel. \n");

#$excel_app->Visible = 1;

$workbook = $excel_app->Workbooks->Open($doc) or die("Can't open ".$doc);
$worksheet = $workbook->WorkSheets(1);
$worksheet->activate;

$min_row    = $worksheet->UsedRange->Row;
$min_col    = $worksheet->UsedRange->Column;
$max_row    = $worksheet->UsedRange->Rows->Count;
$max_col    = $worksheet->UsedRange->Columns->Count;

for ($row = $min_row ; $row < $max_row; $row ++){
    for ($column = $min_col ; $column <= $max_col; $column ++){
       $value = $worksheet->Cells($row, $column)->value;
       echo $value."\n";
    }
}
$excel_app->Workbooks->Close();
$excel_app->Quit();
标签: , , ,