1.Composer安裝
composer require phpoffice/phpspreadsheet
2.引入
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory;//用於載入已有的xml文件 use PhpOffice\PhpSpreadsheet\Spreadsheet;//用於新建xml文件 use Phpoffice\PhpSpreadsheet\Shared\Date;//日期操作類 用處不大 use PhpOffice\PhpSpreadsheet\Style\NumberFormat;//單元格格式類型 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;//保存xml文件
3.使用
3.1-excel文檔操作
$inputFileName = 'xabc.xlsx'; $spreadSheet = IOFactory::load($inputFileName);//載入xml文件 //$spreadSheet = new Spreadsheet();//新建一個xml文件 //$spreadSheet->getProperties()->setCreator("hellow");//設置xml作者 //$resp = $spreadSheet->getSheetCount();//工作表總數 //$resp = $spreadSheet->getSheetNames();//工作表名數組 //$sheet = $spreadSheet->getSheetByName('Sheet1');//根據表名獲取工作表 //$sheet = $spreadSheet->getSheet(0);//根據表索引獲取工作表 //$sheet = $spreadSheet->setActiveSheetIndex(0);//切換當前工作表 $sheet = $spreadSheet->getActiveSheet();
3.2-工作表操作
//常用讀取操作 $sheet->setTitle('Hello');//設置標題 $sheet->mergeCells('E7:F10');//單元格合並 $sheet->unmergeCells('B7:C10');//拆分單元格 $cell = $sheet->getCell('A1');//獲取單元格A1的值 $cell = $sheet->getCellByColumnAndRow(2,1);//獲取單元格 B1 $data = $sheet->toArray();//獲取文檔所有值 $resp = $sheet->getHighestRow();//最大行數 19 $resp = $sheet->getHighestColumn();//最大列數 C //常用寫操作 $resp = $sheet->setCellValue('A1', "hellow\nphp");//設置值 $resp = $sheet->setCellValueByColumnAndRow(2,1,'6666');//設置B2的值 $resp = $sheet->fromArray($arr, null, 'D5');//數組,空值時填充值,開始單元格坐標 //$sheet->getColumnDimension('A')->setWidth(300);//設置A列的寬度 $sheet->getDefaultColumnDimension()->setWidth(50);//設置列默認寬度 //$sheet->getRowDimension(10)->setRowHeight(300);//設置第一行的寬度 $sheet->getDefaultRowDimension()->setRowHeight(50);//設置行默認高度 但不會修改已設置過高度/已有值的行 $resp = $sheet->setCellValue('B2',"hellow\nphp");//設置換行 雙引號+\n+setWrapText $resp = $sheet->getStyle('B2')->getAlignment()->setWrapText(true);//設置換行 $resp = $sheet->setCellValue('B2',"百度");//設置A鏈接 $resp = $sheet->getCell('B3')->getHyperlink()->setUrl('https://www.baidu.com');//設置換行 $resp = $sheet->getStyle('A1')->getFont()->setBold(true)->setName('Arial')->setSize(10);//設置字體加粗大小 $resp = $sheet->getStyle('A1')->getFont()->getName();//字體名 $resp = $sheet->getStyle('B2')->getFont()->getColor()->setRGB('#AEEEEE');//設置顏色 $resp = $sheet->getStyle('A1')->getFont()->getColor()->getRGB();//獲取顏色值 $sheet->getCell('D1')->setValue('2021-03-27 23:22:59'); $sheet->getCell('D2')->setValue(Date::PHPToExcel(time()));//設置日期 //$sheet->getStyle('D2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);//設置日期格式 感覺用處不大 $sheet->getStyle('D2')->getNumberFormat()->setFormatCode('dd/mm/yyyy');//設置日期格式 與上文相同
3.3-單元格操作
//常用讀 $cell = $sheet->getCell('A1');//獲取單元格A1的值 $resp = $cell->getValue();//獲取單元個值 $resp = $cell->getCoordinate();//獲取行列信息 A1 $column = $cell->getColumn();//獲取列信息 A $row = $cell->getRow();//獲取行信息 1 list($column, $row) = PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString($coordi);//拆分成 ['A','1']; $resp = $cell->getDataType();//獲取數據類型 //常用寫 $resp = $cell->setValue('8888');//設置值 $cell->getStyle()->getFont()->getName();//單元個樣式設置 參考工作表設置 只是不需要設置單元格位置而已 //設置A標簽與換行參考工作表設置
4.圖像操作
//圖片讀取與存儲 $draws = $sheet->getDrawingCollection();//獲取所有圖像 $imageFilePath = 'uploads/'; foreach ($draws as $drawing) {//$drawing 為 PhpOffice\PhpSpreadsheet\Worksheet\Drawing類的實例; $coordi = $drawing->getCoordinates();//獲取圖像坐標 eg A4 list($startColumn, $startRow) = PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString($coordi);//拆分成 ['A','4']; $imageFileName = $imageFilePath.$coordi.'_'. mt_rand(1000, 9999); switch ($drawing->getExtension()) { case 'jpg': case 'jpeg': $imageFileName .= '.jpg'; $source = imagecreatefromjpeg($drawing->getPath()); $res = imagejpeg($source, $imageFileName); break; case 'gif': $imageFileName .= '.gif'; $source = imagecreatefromgif($drawing->getPath()); imagegif($source, $imageFileName); break; case 'png': $imageFileName .= '.png'; $source = imagecreatefrompng($drawing->getPath()); $res = imagepng($source, $imageFileName); break; } } //圖像寫入操作 $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setWorksheet($sheet); $drawing->setPath(dirname(__FILE__).'/'.$imageFileName); $drawing->setWidth(200);//圖片寬 $drawing->setHeight(200);//圖片高 $drawing->setOffsetX(100);//設置圖片偏移量 $drawing->setCoordinates('A5');//將圖片放置於單元格
5.保存excel
$writer = new Xlsx($spreadSheet); $resp = $writer->save('ok/wm3.xlsx');
6.完整實例
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory;//用於載入已有的xml文件 use PhpOffice\PhpSpreadsheet\Spreadsheet;//用於新建xml文件 use Phpoffice\PhpSpreadsheet\Shared\Date;//日期操作類 用處不大 use PhpOffice\PhpSpreadsheet\Style\NumberFormat;//單元格格式類型 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;//保存xml文件 $arr = [ ['a1', 'b1', 'c'], ['a2', 'b2', 'c2'] ]; $inputFileName = 'xabc2.xlsx';//一個空的excel文件 $spreadSheet = IOFactory::load($inputFileName);//載入xml文件 //$spreadSheet = new Spreadsheet();//新建一個xml文件 //$spreadSheet->getProperties()->setCreator("hellow");//設置xml作者 //$resp = $spreadSheet->getSheetCount();//工作表總數 //$resp = $spreadSheet->getSheetNames();//工作表名數組 //$sheet = $spreadSheet->getSheetByName('Sheet1');//根據表名獲取工作表 //$sheet = $spreadSheet->getSheet(0);//根據表索引獲取工作表 //$sheet = $spreadSheet->setActiveSheetIndex(0);//切換當前工作表 $sheet = $spreadSheet->getActiveSheet(); $sheet->setTitle('Hello');//設置標題 $sheet->mergeCells('E7:F10');//單元格合並 //$sheet->unmergeCells('B7:C10'); //讀: //--工作表讀 $cell = $sheet->getCell('A1');//獲取單元格A1的值 //$data = $sheet->toArray();//獲取文檔所有值 //$cell = $sheet->getCellByColumnAndRow(2,1);//獲取單元格 B1 //$resp = $sheet->getHighestRow();//最大行數 19 //$resp = $sheet->getHighestColumn();//最大列數 C //--單元格讀 //$resp = $cell->getValue();//獲取單元個值 //$resp = $cell->getCoordinate();//獲取行列信息 A1 //$resp = $cell->getColumn();//獲取列信息 A //$resp = $cell->getRow();//獲取行信息 1 //$resp = $cell->getDataType();//獲取數據類型 //寫 //--工作表設置 $resp = $sheet->setCellValue('A1', "hellow\nphp");//設置值 $resp = $sheet->setCellValueByColumnAndRow(2,1,'6666');//設置B2的值 $resp = $sheet->fromArray($arr, null, 'D5');//數組,空值時填充值,開始單元格坐標 //$sheet->getColumnDimension('A')->setWidth(300);//設置A列的寬度 $sheet->getDefaultColumnDimension()->setWidth(50);//設置列默認寬度 //$sheet->getRowDimension(10)->setRowHeight(300);//設置第一行的寬度 $sheet->getDefaultRowDimension()->setRowHeight(50);//設置行默認高度 但不會修改已設置過高度/已有值的行 $resp = $sheet->setCellValue('B2',"hellow\nphp");//設置換行 雙引號+\n+setWrapText $resp = $sheet->getStyle('B2')->getAlignment()->setWrapText(true);//設置換行 $resp = $sheet->setCellValue('B2',"百度");//設置A鏈接 $resp = $sheet->getCell('B3')->getHyperlink()->setUrl('https://www.baidu.com');//設置換行 $resp = $sheet->getStyle('A1')->getFont()->setBold(true)->setName('Arial')->setSize(10);//設置字體 $resp = $sheet->getStyle('A1')->getFont()->getName();//字體名 $resp = $sheet->getStyle('B2')->getFont()->getColor()->setRGB('#AEEEEE');//設置顏色 $resp = $sheet->getStyle('A1')->getFont()->getColor()->getRGB();//顏色值 $sheet->getCell('D1')->setValue('2021-03-27 23:22:59'); $sheet->getCell('D2')->setValue(Date::PHPToExcel(time()));//設置日期 //$sheet->getStyle('D2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);//設置日期格式 感覺用處不大 $sheet->getStyle('D2')->getNumberFormat()->setFormatCode('dd/mm/yyyy');//設置日期格式 與上文相同 //--單元格設置 //$resp = $cell->setValue('8888');//設置值 $cell->getStyle()->getFont()->getName();//單元個樣式設置 參考工作表設置 只是不需要設置單元格位置而已 //圖像讀取操作 $draws = $sheet->getDrawingCollection();//獲取所有圖像 $imageFilePath = 'uploads/'; foreach ($draws as $drawing) {//$drawing 為 PhpOffice\PhpSpreadsheet\Worksheet\Drawing類的實例; $coordi = $drawing->getCoordinates();//獲取圖像坐標 eg A4 list($startColumn, $startRow) = PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString($coordi);//拆分成 ['A','4']; $imageFileName = $imageFilePath.$coordi.'_'. mt_rand(1000, 9999); switch ($drawing->getExtension()) { case 'jpg': case 'jpeg': $imageFileName .= '.jpg'; $source = imagecreatefromjpeg($drawing->getPath()); $res = imagejpeg($source, $imageFileName); break; case 'gif': $imageFileName .= '.gif'; $source = imagecreatefromgif($drawing->getPath()); imagegif($source, $imageFileName); break; case 'png': $imageFileName .= '.png'; $source = imagecreatefrompng($drawing->getPath()); $res = imagepng($source, $imageFileName); break; } } //圖像寫入操作 $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setWorksheet($sheet); $drawing->setPath(dirname(__FILE__).'/'.$imageFileName); $drawing->setWidth(200);//圖片寬 $drawing->setHeight(200);//圖片高 //$drawing->setOffsetX(100);//設置圖片偏移量 $drawing->setCoordinates('A5');//將圖片放置於單元格 $writer = new Xlsx($spreadSheet); $resp = $writer->save('ok/wm3.xlsx'); var_dump($resp);
