php excel匯出匯入(PhpSpreadsheet)
最近案子開始往PHP8移動,順便把舊版的phpexcel給換掉,記錄一下匯出匯入的使用方式。
套件網址:https://github.com/PHPOffice/PhpSpreadsheet
似乎是phpoffice內的功能的樣子,不過目前只有使用到PhpSpreadsheet這部分的功能。
由於執行的伺服器沒辦法跑composer,這邊用的是別人打包好的函式庫,差別應該只有include檔案有差異而已。
方法
匯出應該直接輸出需要的資料就可以了,目前還沒有碰到其他問題
$today = date("Ymd");
$CntDisposition = "Content-Disposition: attachment;filename=\"";
$CntDisposition = $CntDisposition . $today . "\"_chumonshosai.xlsx";
header($CntDisposition);
header('Cache-Control: max-age=0');
require_once("libraries/PhpSpreadSheet-main/PhpOffice/autoload.php");
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'aaaaaaa');
$sheet->setCellValue('B1', 'bbbbbb');
$sheet->setCellValue('C1', 'cccccccc');
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save('php://output');
匯入的部分要注意時間格式的讀取,時間的格式抓出來會是類似時間戳的數字,需要用excelToTimestamp把時間轉換回來。
$file = $_FILES["file"];
if($file["type"] != "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"){
echo '檔案格式錯誤,請確認檔案格式為xlsx';
exit;
}
require_once("libraries/PhpSpreadSheet-main/PhpOffice/autoload.php");
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);//忽略樣式
$spreadsheet = $reader->load($file["tmp_name"]);
$sheet = $spreadsheet->getSheet(0);//讀取第一個表
//獲取單元格的集合
$cellCollection = $sheet->getCellCollection();
//獲取具有單元格記錄的工作表的最高列和最高行。
$column = $cellCollection->getHighestRowAndColumn();
//內容取出 裝進array中
$data = array();
$startline = 3;
$coltoname = array('A'=>'a_name'
,'B'=>'b_name'
,'C'=>'c_name');
for($i = $startline; $i <= $column['row']; $i++){//行
$datarow = array();
for($j = 'A'; $j <= $column['column']; $j++){//列
if(isset($coltoname[$j])){
$key = $j.$i;
$value = $sheet->getCell($key)->getFormattedValue();
if($value!=''
&& ($j=='C')){//時間轉換處理
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp((int)$value);
$value = date('Y-m-d', $date).' ';
}
$datarow[$coltoname[$j]] = $value;
}
}
$data[] = $datarow;
}
參考資料
https://stackoverflow.com/questions/44304795/how-to-retrieve-date-from-table-cell-using-phpspreadsheet
https://stackoverflow.com/questions/70785023/php-create-an-excel-table