最近因為公司希望我去做一個可以直接讀取 Excel 檔案中的值並更新到資料庫的網頁程式。
就找到了 phpExcelReader 的套件,經過了幾次的測試發現它有一些編碼及格式上的問題。 phpExcelReader 並沒辦法處理某些 Excel 檔案,目前我也還沒找到原因;只知道這樣子不穩定的現象對我會造成困擾。 所以放棄了這一個套件。
接著又再找到另外一套叫 PHPExcel 的套件,他的功能更是強大,且可對 excel 檔案做寫入的動作。
PHPExcel 可以在 http://www.codeplex.com/PHPExcel/ 被找到。
網路上有很多人對 PHPExcel 有一種誤解,認為它只能存取 Excel 2007 的檔案。 其實現在新的版本已經把 Excel 2003 等早期的 Excel 存取支援做進去了。 以下小示範一下如何將一個 Excel 讀入後轉成 Array。
ini_set("memory_limit","1024M"); //設定php可使用的最大記憶體量,如果你的 Excel 只是幾十KB的話,可以將這個值設小一點。
require_once(‘Classes/PHPExcel/IOFactory.php’);
$objPHPExcel = PHPExcel_IOFactory::createReader(‘Excel5′); //設定為舊 Excel 版本相容
$objPHPExcel = PHPExcel_IOFactory::load("j88.xls"); //設定要讀取的檔案
//$objWorksheet = $objPHPExcel->getActiveSheet(); //設定讀取當前頁面
$objWorksheet = $objPHPExcel->getSheet(0); //設定讀取第一個頁面
$array_out[] = null; //建立一個空 array
foreach ($objWorksheet->getRowIterator() as $row_key => $row){ //開始做 row 迴圈
$cellIterator = $row->getCellIterator(); //抓取這一行的 cell 資訊
$cellIterator->setIterateOnlyExistingCells(false); //讀入整行的cells,如果為空就回傳 null
foreach ($cellIterator as $cell_key => $cell){ //做 cell 迴圈
$array_out[$row_key][$cell_key] = $cell->getValue()."; //將每一個row 的 cell 寫入 array
//上面會看到最後有 ." 是為了要強破 array 寫入的是字
//串,不然到時候 array 裡存的會是 object
}
}
echo "<pre>";
print_r($array_out); //輸出的 array
echo "</pre>";