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。參考來源 這裡
註6:如果用 getCalculatedValue() 有錯誤,可以改用 getFormattedValue()。(參考)
註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);
No comments:
Post a Comment