PHP读取EXCEL
生活随笔
收集整理的這篇文章主要介紹了
PHP读取EXCEL
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
常用的用PHP讀取EXCEL的方法有以下三種,各自有各自的優(yōu)缺點。個人推薦用第三種方法,因為它可以跨平臺使用。
1. 以.csv格式讀取
將.xls轉(zhuǎn)換成.csv的文本格式,然后再用PHP分析這個文件,和PHP分析文本沒有什么區(qū)別。
優(yōu)點:跨平臺,效率比較高、可以讀寫。
缺點:只能直接使用.csv的文件,如果經(jīng)常接受.xls二進制文件的話需要手工轉(zhuǎn)換,不能自動化。一個文件只有一個SHEET。
PHP有自帶的分析.csv函數(shù):fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一個由 fopen()、popen() 或 fsockopen() 產(chǎn)生的有效文件指針。
length (可選)必須大于 CVS 文件內(nèi)最長的一行。在 PHP 5 中該參數(shù)是可選的。如果忽略(在 PHP 5.0.4 以后的版本中設(shè)為 0)該參數(shù)的話,那么長度就沒有限制,不過可能會影響執(zhí)行效率。
delimiter (可選)設(shè)置字段分界符(只允許一個字符),默認(rèn)值為逗號。
enclosure (可選)設(shè)置字段環(huán)繞符(只允許一個字符),默認(rèn)值為雙引號。該參數(shù)是在 PHP 4.3.0 中添加的。 和 fgets() 類似,只除了 fgetcsv() 解析讀入的行并找出 CSV 格式的字段然后返回一個包含這些字段的數(shù)組。
fgetcsv() 出錯時返回 FALSE,包括碰到文件結(jié)束時。
注意: CSV 文件中的空行將被返回為一個包含有單個 null 字段的數(shù)組,不會被當(dāng)成錯誤。
當(dāng)然也可以自己手動分析字符串。
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 fields in line $row:/n";
08 $row++;
09 for ($c=0; $c < $num; $c++) {
10 echo $data[$c] . "/n";
11 }
12 }
13 fclose($handle);
14 ?>
還可以利用fputcsv函數(shù)將行格式化為 CSV 并寫入文件指針。
另,由于日期型的特殊性,在取值時可能會產(chǎn)生錯誤,可將Excel單元格類型設(shè)為Text,
將日期以文本形式讀取,如需日期型字符再通過PHP對其進行處理即可(strtotime()結(jié)合date())。
2. ODBC鏈接數(shù)據(jù)源
優(yōu)點:支持多種格式,cvs, xls等。支持讀寫,使用標(biāo)準(zhǔn)SQL語言,和SQLSERVER、MYSQL數(shù)據(jù)庫幾乎完全一樣。
缺點:值支持windows服務(wù)器
3. PHP自定義類
優(yōu)點:跨平臺。某些類支持寫操作。支持.xls二進制文件
常用的類有phpExcelReader、PHPExcel。其中后者支持讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取文件的。返回一個數(shù)組,包含表格的所有內(nèi)容。
該 class 使用的方法可以參考網(wǎng)站下載回來的壓縮檔中的 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 應(yīng)該是壞了。
這是下載地址:
phpExcelReader:http://sourceforge.net/projects/phpexcelreader/
1. 以.csv格式讀取
將.xls轉(zhuǎn)換成.csv的文本格式,然后再用PHP分析這個文件,和PHP分析文本沒有什么區(qū)別。
優(yōu)點:跨平臺,效率比較高、可以讀寫。
缺點:只能直接使用.csv的文件,如果經(jīng)常接受.xls二進制文件的話需要手工轉(zhuǎn)換,不能自動化。一個文件只有一個SHEET。
PHP有自帶的分析.csv函數(shù):fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一個由 fopen()、popen() 或 fsockopen() 產(chǎn)生的有效文件指針。
length (可選)必須大于 CVS 文件內(nèi)最長的一行。在 PHP 5 中該參數(shù)是可選的。如果忽略(在 PHP 5.0.4 以后的版本中設(shè)為 0)該參數(shù)的話,那么長度就沒有限制,不過可能會影響執(zhí)行效率。
delimiter (可選)設(shè)置字段分界符(只允許一個字符),默認(rèn)值為逗號。
enclosure (可選)設(shè)置字段環(huán)繞符(只允許一個字符),默認(rèn)值為雙引號。該參數(shù)是在 PHP 4.3.0 中添加的。 和 fgets() 類似,只除了 fgetcsv() 解析讀入的行并找出 CSV 格式的字段然后返回一個包含這些字段的數(shù)組。
fgetcsv() 出錯時返回 FALSE,包括碰到文件結(jié)束時。
注意: CSV 文件中的空行將被返回為一個包含有單個 null 字段的數(shù)組,不會被當(dāng)成錯誤。
當(dāng)然也可以自己手動分析字符串。
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 fields in line $row:/n";
08 $row++;
09 for ($c=0; $c < $num; $c++) {
10 echo $data[$c] . "/n";
11 }
12 }
13 fclose($handle);
14 ?>
還可以利用fputcsv函數(shù)將行格式化為 CSV 并寫入文件指針。
另,由于日期型的特殊性,在取值時可能會產(chǎn)生錯誤,可將Excel單元格類型設(shè)為Text,
將日期以文本形式讀取,如需日期型字符再通過PHP對其進行處理即可(strtotime()結(jié)合date())。
2. ODBC鏈接數(shù)據(jù)源
優(yōu)點:支持多種格式,cvs, xls等。支持讀寫,使用標(biāo)準(zhǔn)SQL語言,和SQLSERVER、MYSQL數(shù)據(jù)庫幾乎完全一樣。
缺點:值支持windows服務(wù)器
3. PHP自定義類
優(yōu)點:跨平臺。某些類支持寫操作。支持.xls二進制文件
常用的類有phpExcelReader、PHPExcel。其中后者支持讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取文件的。返回一個數(shù)組,包含表格的所有內(nèi)容。
該 class 使用的方法可以參考網(wǎng)站下載回來的壓縮檔中的 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 應(yīng)該是壞了。
這是下載地址:
phpExcelReader:http://sourceforge.net/projects/phpexcelreader/
PHPExcel:http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=Documents&referringTitle=Home
轉(zhuǎn)自:http://blog.csdn.net/aidenliu/article/details/6556794
總結(jié)
以上是生活随笔為你收集整理的PHP读取EXCEL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP读取excel表格内容 PHP-E
- 下一篇: PHP Liunx 服务安全防范方案