PHPExcel所遇到問題的知識點總結

工做中進行excel的時候遇到了兩個問題,php

1.excel表中列值過大,因爲沒有進行特殊處理,程序無法正常運行;git

2.列值中含有日期格式的文本,不能正確讀取;github

因此經過網絡搜索,並解決了問題,記錄一下,以備後用:網絡

 

解決方法:spa

/****知識點總結*****
1.列數值過大,能夠經過 PHPExcel_Cell::columnIndexFromString($column),獲取最大列的數值excel

2.針對表格中有日期的,能夠經過PHPExcel_Shared_Date::ExcelToPHP($value) 進行格式化,
如獲取一個日期值,可以下面語句進行獲取:
$date = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue()));code

*******************/blog

 

<?php
//PHPExcel類獲取地址 https://github.com/PHPOffice/PHPExcel
//引入PHPExcel類文件
include_once './PHPExcel.php';
//讀取的excel文件
$excelFile = './test.xlsx';

/**實例化讀取excel文件類,根據excel版本進行不一樣獲取,下面是不一樣方式*/
/***
    //Excel5方式
    $objReader = new PHPExcel_Reader_Excel5();
    $objReader = PHPExcel_IOFactory::createWriter('Excel5');

    //Excel2007方式
    $objReader = new PHPExcel_Reader_Excel2007();
    $objReader = PHPExcel_IOFactory::createWriter('Excel2007');
***/

//因爲個人文件是07版本,因此使用Excel2007方式
$objReader = PHPExcel_IOFactory::createReader('Excel2007');

//載入excel文件
$objPHPExcel = $objReader->load($excelFile);

//讀取excel的第一個工做表
$sheet = $objPHPExcel->getSheet(0);

//取得總行數
$highestRow = $sheet->getHighestRow();

//取得總列數
$highestColumm = $sheet->getHighestColumn();

//獲取最大列值字母對應的數值
$highestColummNum = PHPExcel_Cell::columnIndexFromString($highestColumm);


if (!$highestRow || !$highestColumm) {
    exit('表中無數據');
}

//獲取表格值進行存儲
$dataExcel = array();

$i = 0;
//若是列值過大,進行計算,
if ($highestColummNum > 26) {
    //循環讀取每一個單元格的數據
    for ($row = 2; $row <= $highestRow; $row++) {//行數是以第2行開始
        for ($column = 'A'; PHPExcel_Cell::columnIndexFromString($column) <= $highestColummNum; $column++) {//列數是以A列開始
            if ($column == 'E') {//假設第E列是日期
            $dataExcel[$i][] = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue()));
        } else {
            $dataExcel[$i][] = $sheet->getCell($column.$row)->getValue();
        }
        }
        $i++;
    }
} else {
    //循環讀取每一個單元格的數據
    for ($row = 2; $row <= $highestRow; $row++) {//行數是以第2行開始
        for ($column = 'A';$column <= $highestColumm; $column++) {//列數是以A列開始
            if ($column == 'E') {//假設第E列是日期
            $dataExcel[$i][] = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue()));
        } else {
            $dataExcel[$i][] = $sheet->getCell($column.$row)->getValue();
        }
        }
        $i++;
    }
}


if (!$dataExcel) {
    exit('未獲取任何數據');
}

print_r($dataExcel);
exit;



/****知識點總結*****
1.列數值過大,能夠經過 PHPExcel_Cell::columnIndexFromString($column),獲取最大列的數值


2.針對表格中有日期的,能夠經過PHPExcel_Shared_Date::ExcelToPHP($value) 進行格式化,
如獲取一個日期值,可以下面語句進行獲取:
$date = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue()));

*******************/
?>
  
 
相關文章
相關標籤/搜索