一、概述

PHP-ExcelReader是一个读取Excel xsl文件内容的一个PHP类。

它的下载网址:http://sourceforge.net/projects/phpexcelreader/

文件名:phpExcelReader.zip

包含两个必需文件:oleread.inc、reader.php。其它文件是一个应用例子,自述文件等

二、文件使用

首先,包含reader类文件:require_once ” reader.php”;

新建一个实例:$xl_reader= new Spreadsheet_Excel_Reader ( );

读取Excel文件信息:$xl_reader->read(“filename.xls”);

它将导出Excel文件中所有可以识别的数据存储在一个对象中。数据存储在2个数组中,目前没有提供方法/函数访问这些数据.可以像下面这样简单的使用数组名。

sheets数组包含了读取入对象的大量数据。它将导出Excel文件中所有可以识别的数据存储在一个2维数组中 $xl_reader->sheets[x][y]。x 为文档中的表序号,y 是以下的某个参数 :

l       numRows — int — 表的行数

例如:$rows = $xl_reader->sheets[0][‘numRows’]

l       numCols — int — 表的列数

例如:$cols = $xl_reader->sheets[0][‘numCols’]

l       cells — array — 表的实际内容。是一个 [row][column]格式的2维数组

例如:$cell_2_4 = $xl_reader->sheets[0][‘cells’][2][4] //行2,列4中的数据

l       cellsInfo — array — 表格中不同数据类型的信息。每个都包含了表格的原始数据和类型。这个数组包含2部分:raw — 表格原始数据;type — 数据类型。

注:只显示非文本数据信息。

例如:$cell_info = $xl_reader[0][‘cellsInfo’][2][4]

$cell_info[‘raw’] is the raw data from the cell

$cell_info[‘type’] is the data type

$xl_reader->sheets数组示例:

Array

(

[0] => Array

(

[maxrow] => 0

[maxcol] => 0

[numRows] => 30

[numCols] => 12

[cells] => Array

(

[1] => Array

(

[1] => 日期

[2] => 捐款人姓名/职称

[3] => 金额

[4] => 原捐款金额

[5] => 收据号

[6] => 收据抬头

[7] => 性别

[8] => 用途

[9] => 地址

[10] => 联系人/电话

[11] => 执行情形

[12] => 备注

)

[2] => Array

(

[1] => 2007/06/02

[2] => 秦荣华 魏清莲 /集團

[3] => 300000

[4] => 45

[5] => 502

[6] => 宁波国雅机械有限公司

[7] => 夫婦

[8] => 测试

[10] => 胡爱华秘书/135 6651 8117

[11] => 2008-9愛心小學1所25萬  2008-12愛心小學1所25萬 2009-9 珍珠班2班 750000元  餘額 25萬

[12] => 备注

)

)

[cellsInfo] => Array

(

[2] => Array

(

[1] => Array

(

[raw] => 1180742400

[type] => date

)

[3] => Array

(

[raw] => 300000

[type] => number

)

[4] => Array

(

[raw] => 45

[type] => unknown

)

[5] => Array

(

[raw] => 502

[type] => unknown

)

)

)

)

[1] => Array

(

[maxrow] => 0

[maxcol] => 0

[numRows] => 0

[numCols] => 0

)

[2] => Array

(

[maxrow] => 0

[maxcol] => 0

[numRows] => 0

[numCols] => 0

)

)

boundsheets 数组包含了对象的其它信息,数组按workbook索引。 第二个索引为名称:$xl_reader->boundsheets[i][‘name’] 返回第i个表的表名

例如:$sheetname = $xl_reader->boundsheets[0][‘name’]; // name of the first sheet

$xl_reader-> boundsheets数组示例:

Array

(

[0] => Array

(

[name] => Sheet1

[offset] => 3054

)

[1] => Array

(

[name] => Sheet2

[offset] => 6147

)

[2] => Array

(

[name] => Sheet3

[offset] => 6410

)

)

使用注意事项:

关于phpExcelReader有以下几点说明用之前请阅读
1. Excel/reader.php文件中已经用require_once包含了oleread.inc文件,所以在调用的时候不需要加载oleread.inc。
2. 官方提供的excel文件jxlwtest.xls已经损坏,无法读取与解析。
3. 原始Excel/reader.php文件的第31行(如下)会导致错误:
require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;
原因是Spreadsheet/Excel/Reader/OLERead.php文件不存在。其实这里所需的文件就是Excel/oleread.inc,把require_once后的文件名改成 ’oleread.inc’即可。
4. 原始Excel/reader.php文件的第261行会导致如下警告:
Deprecated: Assigning thereturn value of new by reference is deprecated
其原因是此行的 =& 符号已经在PHP 5.3中被废弃。根据该符号在此处的作用,直接将其改为 = 即可。
5. PHP-ExcelReader不支持Excel 2007文档的解析,也就是说扩展名为xlsx的Excel文件不能使用本类库进行解析;它只针对扩展名为xls的Excel文件。
6. PHP-ExcelReader的设置编码方法基于iconv命 令,setOutputEncoding方法的参数就是需要设置的字符集的名称。要使这个方法生效需要给本地的PHP环境安装iconv扩展;若本地 PHP环境没有iconv扩展,那么PHP-ExcelReader的编码方法默认为Unicode。
7.PHP-ExceReader在解析整数的时候可能会出现精度上的误差,如58解析为57.5,原因不明。能做的就是解析完后检查下数据,然后四舍五入(如果有必要的话)。
8. PHP-ExcelReader对于excel文件中的空白单元格,要么直接跳过不存放到结果数组中,要么保存为0或者””(空字符串)。