PHP读取EXCEL
2011-06-20 17:23
134 查看
常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。
1.以.csv格式读取
将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。
优点:跨平台,效率比较高、可以读写。
缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。
PHP有自带的分析.csv函数:fgetcsv
arrayfgetcsv(int$handle[,int$length[,string$delimiter[,string$enclosure]]])
handle一个由fopen()、popen()或fsockopen()产生的有效文件指针。
length(可选)必须大于CVS文件内最长的一行。在PHP5中该参数是可选的。如果忽略(在PHP5.0.4以后的版本中设为0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。
delimiter(可选)设置字段分界符(只允许一个字符),默认值为逗号。
enclosure(可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在PHP4.3.0中添加的。和fgets()类似,只除了fgetcsv()解析读入的行并找出CSV格式的字段然后返回一个包含这些字段的数组。
fgetcsv()出错时返回FALSE,包括碰到文件结束时。
注意:CSV文件中的空行将被返回为一个包含有单个null字段的数组,不会被当成错误。
当然也可以自己手动分析字符串。
还可以利用fputcsv函数将行格式化为CSV并写入文件指针。
另,由于日期型的特殊性,在取值时可能会产生错误,可将Excel单元格类型设为Text,
将日期以文本形式读取,如需日期型字符再通过PHP对其进行处理即可(strtotime()结合date())。
2.ODBC链接数据源
优点:支持多种格式,cvs,xls等。支持读写,使用标准SQL语言,和SQLSERVER、MYSQL数据库几乎完全一样。
缺点:值支持windows服务器
3.PHP自定义类
优点:跨平台。某些类支持写操作。支持.xls二进制文件
常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。
phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。
该class使用的方法可以参考网站下载回来的压缩档中的example.php。
不过我下载回来的(版本2009-03-30),有两点要注意:
reader.php中的下面这行要修改
将require_once‘Spreadsheet/Excel/Reader/OLERead.php’;
改为require_once‘oleread.inc’;
example.php中
修改$data->setOutputEncoding(‘CP1251′);
为$data->setOutputEncoding(‘CP936′);
修改nl2br(htmlentities($data->sheets[$sheet]['cells'][$row][$col]));
为$table_output[$sheet].=nl2br(htmlspecialchars($data->sheets[$sheet]['cells'][$row][$col]));
不然中文会有问题。
繁体的话可以修改为CP950、日文是CP932,具体可参考codepage说明。
修改$data->read(‘jxlrwtest.xls’)为自己的excel文件名,zip档中附的jxlrwtest.xls应该是坏了。
这是下载地址:
phpExcelReader:http://sourceforge.net/projects/phpexcelreader/
PHPExcel:http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=Documents&referringTitle=Home
1.以.csv格式读取
将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。
优点:跨平台,效率比较高、可以读写。
缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。
PHP有自带的分析.csv函数:fgetcsv
arrayfgetcsv(int$handle[,int$length[,string$delimiter[,string$enclosure]]])
handle一个由fopen()、popen()或fsockopen()产生的有效文件指针。
length(可选)必须大于CVS文件内最长的一行。在PHP5中该参数是可选的。如果忽略(在PHP5.0.4以后的版本中设为0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。
delimiter(可选)设置字段分界符(只允许一个字符),默认值为逗号。
enclosure(可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在PHP4.3.0中添加的。和fgets()类似,只除了fgetcsv()解析读入的行并找出CSV格式的字段然后返回一个包含这些字段的数组。
fgetcsv()出错时返回FALSE,包括碰到文件结束时。
注意:CSV文件中的空行将被返回为一个包含有单个null字段的数组,不会被当成错误。
当然也可以自己手动分析字符串。
01 | <?php |
02 | $row =1; |
03 | $handle = fopen ( "test.csv" , "r" ); |
04 | while ( $data = fgetcsv ( $handle ,1000, "," )){ |
05 | $num = count ( $data ); |
06 | echo " |
07 | $num fieldsinline $row :/n"; |
08 | $row ++; |
09 | for ( $c =0; $c < $num ; $c ++){ |
10 | echo $data [ $c ]. "/n" ; |
11 | } |
12 | } |
13 | fclose( $handle ); |
14 | ?> |
另,由于日期型的特殊性,在取值时可能会产生错误,可将Excel单元格类型设为Text,
将日期以文本形式读取,如需日期型字符再通过PHP对其进行处理即可(strtotime()结合date())。
2.ODBC链接数据源
优点:支持多种格式,cvs,xls等。支持读写,使用标准SQL语言,和SQLSERVER、MYSQL数据库几乎完全一样。
缺点:值支持windows服务器
3.PHP自定义类
优点:跨平台。某些类支持写操作。支持.xls二进制文件
常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。
phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。
该class使用的方法可以参考网站下载回来的压缩档中的example.php。
不过我下载回来的(版本2009-03-30),有两点要注意:
reader.php中的下面这行要修改
将require_once‘Spreadsheet/Excel/Reader/OLERead.php’;
改为require_once‘oleread.inc’;
example.php中
修改$data->setOutputEncoding(‘CP1251′);
为$data->setOutputEncoding(‘CP936′);
修改nl2br(htmlentities($data->sheets[$sheet]['cells'][$row][$col]));
为$table_output[$sheet].=nl2br(htmlspecialchars($data->sheets[$sheet]['cells'][$row][$col]));
不然中文会有问题。
繁体的话可以修改为CP950、日文是CP932,具体可参考codepage说明。
修改$data->read(‘jxlrwtest.xls’)为自己的excel文件名,zip档中附的jxlrwtest.xls应该是坏了。
这是下载地址:
phpExcelReader:
PHPExcel:
相关文章推荐
- PHPExcel 读取Excel单元格内容为时间格式 处理方法
- php读取excel文件的实例代码
- Extjs 4.0 ajax请求超时,php请求超时,excel读取时php提示内存不足。
- php读取excel文件的日期时间出现类似41395的问题解决
- PHP读取excel文档
- php读取excel文件 更新修改excel
- PHP读取Excel里的文件
- PHPExcel生成或读取excel文件
- php-Excel-Reader读取日期有误做法
- phpexcel无法读取
- phpexcel的读取和写入
- phpExcel 读取和导出
- PHP读取Excel文件的实现代码
- phpexcel的getSheet(i)只能读取一页,怎么获取一个excel有多少分页?
- PHP读取Excel文件(PHPExcel)
- php使用ExcelReader.php读取excel
- PHPExcel读取Excel文件的实现代码
- PHP读取EXCEL
- PHPExcel正确读取excel表格时间单元格
- php读取excel中的时间转换问题