Wednesday, November 28, 2012

[PHP][好文] 用PHP讀取Excel檔案。 ( PHPExcel )

1. 去 PHPExcle 官網下載套件。
2. 然後使用下列程式碼:

function num2alpha($n)  //數字轉英文(0=>A、1=>B、26=>AA...以此類推)
{
    for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
        $r = chr($n%26 + 0x41) . $r;
    return $r;
}

function alpha2num($a)  //英文轉數字(A=>0、B=>1、AA=>26...以此類推)
{
    $l = strlen($a);
    $n = 0;
    for($i = 0; $i < $l; $i++)
        $n = $n*26 + ord($a[$i]) - 0x40;
    return $n-1;
}

require("PHPExcel/Classes/PHPExcel/IOFactory.php");
$objPHPExcel = PHPExcel_IOFactory::createReader("Excel5"); //設定為舊 Excel 版本相容
$objPHPExcel = PHPExcel_IOFactory::load($excel_file)//設定要讀取的檔案
$objWorksheet = $objPHPExcel->getSheet(0)//設定讀取第一個Sheet
$allColumn = $objWorksheet->getHighestColumn()//取得最大列號
$allColumn = alpha2num($allColumn)//將列號轉成列數
$allRow = $objWorksheet->getHighestRow()//取得最大行數
for($row = 1; $row < $allRow; $row++){
        for($column = 0; $column <= $allColumn; $column++){
                $column_alpha = num2alpha($column)//將列數轉成列號
                if($objWorksheet->getCell($column_alpha.$row)->getCalculatedValue() != ""){
                        echo $objWorksheet->getCell($column_alpha.$row)->getCalculatedValue();
                        echo "<br />";
                }
        }
        echo "<hr />";
}

註1:如果要讀新版的Excel檔案(.xlsx),需要將 php.ini 中的 extension=php_zip.dll 註解拿掉。
註2:用 getCalculatedValue() 會抓到excel公式計算後的值,如果要想抓原始的 excel 公式,可以改用 getValue() 。
註3:如果用 getValue 取超過13碼的數字欄位,會自動四捨五入,例如:1234567890123 取出來會變成 1234567890120 ,可以改用 
getFormattedValue 來取,就OK了。
註4:phpExcel中文幫助手冊(簡體中文)
註5:如果 excel 欄位的儲存格格式是"日期",而我們用 PHPExcel 取出來變成一串數字(例如:41128),這個數字是從 1900-01-01 起過了幾天,因為 PHP 的 UNIX 時間是從 1970-01-01 開始過了幾秒,所以我們就可以直接用公式轉換,$EXCEL_DATE = 41128。參考來源 這裡
$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
註6:如果用 getCalculatedValue() 有錯誤,可以改用 getFormattedValue()。(參考)

No comments:

Post a Comment