利用PHPExcel如何讀取表格的內容呢?話不多說,下面的這篇文章將給大家詳細的介紹關於PHPExcel讀取表格中內容的方法。
先引入類IOFactory.php
require_once '../PHPExcel/IOFactory.php';$filePath = "test.xlsx"; // 測試檔案
載入測試檔案
$inputFileType = PHPExcel_IOFactory::identify($filePath) 判斷檔案類型
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 執行個體化類型對象
$objPHPExcel = $objReader->load($filePath); 負載檔案
下面主要判斷Excel2007和Excel5類型,即xlsx/xlsm/xltx/xltm和xls/xlt格式檔案
try { $inputFileType = PHPExcel_IOFactory::identify($filePath); if ($inputFileType !== "Excel5" && $inputFileType !== "Excel2007" ) { unlink($filePath) && str_alert(-1,"請確保匯入的檔案格式正確!"); } $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($filePath);} catch(Exception $e) { unlink($filePath) && str_alert(-1,'負載檔案發生錯誤:”'.pathinfo($filePath,PATHINFO_BASENAME).'”: '.$e->getMessage()); }
擷取當前工作表
$sheet = $objPHPExcel->getSheet(0);//或者$sheet = $objPHPExcel->getActiveSheet();
擷取工作表行數和列數
$highestRow = $sheet->getHighestRow();$highestColumn = $sheet->getHighestColumn();
注意:有時候你會發現你的表格明明有內容的行數就5行,但是擷取到的$highestRow卻有7,8行或者更多,這可能是因為你在操作你的表格的時候不小心點擊了其它行數,雖然沒有填寫內容,但getHighestRow也是能夠識別出行數;
想要擷取有內容的行數應該使用getHighestDataRow和getHighestDataColumn
源碼注釋是這樣介紹的string Highest row number that contains data,即包含資料的字串最高行數.
儲存格具體內容
xlsx類型的表格儲存格是通過類似xy軸座標來擷取的,
可通過類似
$sheet->getCell("A1")->getValue(); $sheet->getCell("B2")->getValue();
擷取相應位置的內容,
如果不想通過字母了來遍曆擷取,可以用數字索引方法
$sheet->getCellByColumnAndRow(0,1); $sheet->getCellByColumnAndRow(1,2);
注意座標中第一個參數從0開始,0代表A,1代表B...,第二個參數從1開始.
下面是遍曆表格擷取全部儲存格內容:
$dataSet=array();for ($column = "A"; $column <= $highestColumn; $column++) {//列數是以A列開始 for ($row = 4; $row <= $highestRow; $row++) { //行數是以第4行開始 $cell = $sheet->getCell($column . $row)->getValue(); if($cell instanceof PHPExcel_RichText) { //富文本轉換字串 $cell = $cell->__toString(); } $dataSet[$row][] = $cell; }}
其中富文本轉換字串,是使用$cell instanceof PHPExcel_RichText判斷是否為富文本,查閱資料發現如果你的儲存格中字串包含兩種以上的字型會自動被設為富文本,這時候需要__toString()轉換
判斷合併儲存格是否位於最左上方
當我們迴圈輸出所有儲存格後發現,一些被合并的儲存格只有最左上座標的是有內容的,其他都是null
例如A4,A5合并成一個儲存格,getCell("A4")是有正常內容的,但是getCell("A5")是null.
isMergeRangeValueCell可以用來判斷某個具體的儲存格是否為最左上方
$sheet->getCell('A' . $row)->isMergeRangeValueCell()
當$row為4的時候是返回true,5的時候返回false
轉換時間
擷取表格中時間格式的內容,需要PHPExcel_Shared_Date::ExcelToPHP()來轉換為php可識別的時間格式
date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($sometime);