封裝一個類:
<?php
require __DIR__.'/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx;
class MyPhpSpreadsheet{
/**
* 讀取xlsx(導入)
* @param 上傳的臨時文件地址
*/
public function read_xlsx($files){
$tmp = $files['tmp_name'];
if(empty($tmp)){
throw new Exception('請選擇要導入的Xlsx文件');
}
$reader = new ReaderXlsx();
$spreadsheet = $reader->load($tmp);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);exit;
}
/**
* 導出excel
*/
public function arrayToXlsx($data,$title){
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
//設置工作表標題名稱
$worksheet->setTitle('工作表格1');
//表頭 設置單元格內容
foreach ($title as $key => $value) {
$worksheet->setCellValueByColumnAndRow($key+1, 1, $value);
}
$row = 2; //從第二行開始
foreach ($data as $item) {
$column = 1; //從第一列設置並初始化
foreach ($item as $value) {
$worksheet->setCellValueByColumnAndRow($column, $row, $value); //哪一列哪一行設置哪個值
$column++; //列數加1
}
$row++; //行數加1
}
//輸出到瀏覽器
$fileName = date('YmdHis',time());
$fileType = 'Xlsx';
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$this->excelBrowserExport($fileName, $fileType);
$writer->save('php://output');
}
public function excelBrowserExport($fileName, $fileType) {
//文件名稱校驗
if(!$fileName) {
throw new Exception('文件名不能爲空');
}
//Excel文件類型校驗
$type = ['Excel2007', 'Xlsx', 'Excel5', 'xls'];
if(!in_array($fileType, $type)) {
throw new Exception('未知文件類型');
}
if($fileType == 'Excel2007' || $fileType == 'Xlsx') {
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$fileName.'.xlsx"');
header('Cache-Control: max-age=0');
} else {
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$fileName.'.xls"');
header('Cache-Control: max-age=0');
}
}
}
導出調用:
$data = [
[1, 'jack', 10],
[2, 'mike', 12],
[3, 'jane', 21],
[4, 'paul', 26],
[5, 'kitty', 25],
[6, 'yami', 60],
];
$title = ['id', 'name', 'age'];
$MyPhpSpreadsheet = new MyPhpSpreadsheet();
$MyPhpSpreadsheet->arrayToXlsx($data,$title);
導入調用:
前端input type='file' 上傳 ,後端讀取$_FILES
參考:https://www.cnblogs.com/itbsl/p/10369695.html