利用PHPExcel如何讀取表格中內容

來源:互聯網
上載者:User
利用PHPExcel如何讀取表格的內容呢?話不多說,下面的這篇文章將給大家詳細的介紹關於PHPExcel讀取表格中內容的方法。

先引入類IOFactory.php

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);//或者$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);
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.