PHPExcel讀取表格內容

PHPExcel讀取表格

---php

先引入類IOFactory.phpide

require_once '../PHPExcel/IOFactory.php';
    $filePath = "test.xlsx";  // 測試文件

加載測試文件
 
 1.$inputFileType = PHPExcel_IOFactory::identify($filePath) 判斷文件類型
 2. $objReader = PHPExcel_IOFactory::createReader($inputFileType); 實例化類型對象
 3. $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);

  或者ui

$sheet = $objPHPExcel->getActiveSheet();

獲取工做錶行數和列數

$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();


注意:有時候你會發現你的表格明明有內容的行數就5行,可是獲取到的$highestRow卻有7,8行或者更多,這多是由於你在操做你的表格的時候不當心點擊了其它行數,雖然沒有填寫內容,但getHighestRow也是可以識別出行數;code

想要獲取有內容的行數應該使用getHighestDataRow和getHighestDataColumn,對象

源碼註釋是這樣介紹的string Highest row number that contains data,即包含數據的字符串最高行數.索引

單元格具體內容

xlsx類型的表格單元格是經過相似xy軸座標來獲取的,
可經過相似字符串

$sheet->getCell("A1")->getValue();
$sheet->getCell("B2")->getValue();

  獲取相應位置的內容,
  若是不想經過字母了來遍歷獲取,能夠用數字索引方法get

$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);