PHPExcel讀取excel檔案示例
PHPExcel最新版官方下載網址:http://phpexcel.codeplex.com/
PHPExcel是一個非常方便生成Excel格式檔案的類,官方下載包中帶有大量如何生成各種樣式excel檔案的示例,但沒有一個讀取Excel檔案的完整例子,下面是讀取的例子:
讀取Excel的內容主要有兩個選擇:PHPExcelReader、PHPExcel。
PHPExcelReader比較輕量級,僅支援Excel的讀取,實際上就是一個Reader。但是可惜的是不能夠支援Excel 2007的格式(.xlsx)。
PHPExcel比較強大,能夠將記憶體中的資料輸出成Excel檔案,同時還能夠對Excel做各種操作,下面主要介紹下如何使用PHPExcel進行Excel 2007格式(.xlsx)檔案的讀取。
下載PHPExcel後儲存到自己的類檔案目錄中,然後使用以下程式碼可以開啟Excel 2007(xlsx)格式的檔案:
require_once '/libs/PHPExcel-1.8.0/Classes/PHPExcel.php'; //修改為自己的目錄
echo '<p>TEST PHPExcel 1.8.0: read xlsx file</p>';
$objReader = PHPExcel_IOFactory::createReaderForFile($filename);
$objPHPExcel = $objReader->load($filename);
$objPHPExcel->setActiveSheetIndex(1);
$date = $objPHPExcel->getActiveSheet()->getCell('A16')->getValue();
輸出$date變數就能夠看到檔案中的內容了。PHPExcel使用PHPExcel_IOFactory這個類來自動匹配所上傳的檔案型別,當然我們也可以自己制定要解析的檔案型別。
之後通過load方法,將PHP檔案載入到objPHPExcel物件中。如果Excel檔案有多個Sheet,可以通過setActiveSheetIndex來設定當前活動的Sheet。
需要注意的是,對於Excel中的日期格式,PHPExcel讀出來的是不是日期型別,需要我們使用以下方法來進行日期型別轉換。
echo date("Y-m-d H:i:s",PHPExcel_Shared_Date::ExcelToPHP($date));
下面的程式碼顯示瞭如何遍歷顯示Excel的內容:
<table>
<?php
$objWorksheet = $objPHPExcel->getActiveSheet();
$i = 0;
foreach($objWorksheet->getRowIterator() as $row){
?>
<tr>
<?php
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
if( $i == 0 ){
echo '<thead>';
}
foreach($cellIterator as $cell){
echo '<td>' . $cell->getValue() . '</td>';
}
if( $i == 0 ){
echo '</thead>';
}
$i++;
?>
</tr>
<?php
}
?>
</table>
=================================================
傳統方法:
<?php
require_once '../Classes/PHPExcel/IOFactory.php';
// Check prerequisites
if (!file_exists("test.xls")) {
exit("not found test.xls.\n");
}
$reader = PHPExcel_IOFactory::createReader('Excel5'); //設定以Excel5格式(Excel97-2003工作簿)
$PHPExcel = $reader->load("test.xls"); // 載入excel檔案
$sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表
$highestRow = $sheet->getHighestRow(); // 取得總行數
$highestColumm = $sheet->getHighestColumn(); // 取得總列數
$highestColumm= PHPExcel_Cell::columnIndexFromString($colsNum); //字母列轉換為數字列 如:AA變為27
/** 迴圈讀取每個單元格的資料 */
for ($row = 1; $row <= $highestRow; $row++){//行數是以第1行開始
for ($column = 0; $column < $highestColumm; $column++) {//列數是以第0列開始
$columnName = PHPExcel_Cell::stringFromColumnIndex($column);
echo $columnName.$row.":".$sheet->getCellByColumnAndRow($column, $row)->getValue()."<br />";
}
}
?>
精簡方法:
<?php
require_once '../Classes/PHPExcel/IOFactory.php';
// Check prerequisites
if (!file_exists("test.xls")) {
exit("not found test.xls.\n");
}
$reader = PHPExcel_IOFactory::createReader('Excel5'); //設定以Excel5格式(Excel97-2003工作簿)
$PHPExcel = $reader->load("test.xls"); // 載入excel檔案
$sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表
$highestRow = $sheet->getHighestRow(); // 取得總行數
$highestColumm = $sheet->getHighestColumn(); // 取得總列數
/** 迴圈讀取每個單元格的資料 */
for ($row = 1; $row <= $highestRow; $row++){//行數是以第1行開始
for ($column = 'A'; $column <= $highestColumm; $column++) {//列數是以A列開始
$dataset[] = $sheet->getCell($column.$row)->getValue();
echo $column.$row.":".$sheet->getCell($column.$row)->getValue()."<br />";
}
}
?>