PhpSpreadsheet提供了豐富的API接口,可以設置諸多單元格以及文檔屬性,包括樣式、圖片、日期、函數等等諸多應用,總之你想要什麼樣的Excel表格,PhpSpreadsheet都能做到。
在thinkphp中引入該三方庫的方法:
composer require phpoffice/phpspreadsheet
各個功能類說明如下:
use
PhpOffice\PhpSpreadsheet\Spreadsheet;
use
PhpOffice\PhpSpreadsheet\Style\Color;
//設置字體顏色
use
PhpOffice\PhpSpreadsheet\Style\Alignment;
//設置對齊方式
use
PhpOffice\PhpSpreadsheet\Style\Border;
//設置Border樣式
use
PhpOffice\PhpSpreadsheet\Style\NumberFormat;
//數字格式化
use
PhpOffice\PhpSpreadsheet\Writer\Xlsx;
//導出XLSX文件
use
PhpOffice\PhpSpreadsheet\Style\Fill;
//設置背景色
在調試設置時,確保引入了正確的文件並實例化。
-
use PhpOffice\PhpSpreadsheet\Spreadsheet;
-
$spreadsheet = new Spreadsheet();
-
$worksheet = $spreadsheet->getActiveSheet();
設置工作簿的默認樣式
可以設置工作簿的默認樣式。讓我們將默認字體設置爲Arial大小8:
$spreadsheet->getDefaultStyle()->getFont()->setName('Arial');
$spreadsheet->getDefaultStyle()->getFont()->setSize(8);
字體
第1行代碼將A7至B7兩單元格設置爲粗體字,Arial字體,10號字;第2行代碼將B1單元格設置爲粗體字。
-
$spreadsheet->getActiveSheet()->getStyle('A7:B7')->getFont()->setBold(true)->setName('Arial')
-
->setSize(10);;
-
$spreadsheet->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
顏色
將文字顏色設置爲紅色。
-
$spreadsheet->getActiveSheet()->getStyle('A4')
-
->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
圖片
可以將圖片加載到Excel中。
-
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
-
$drawing->setName('Logo');
-
$drawing->setDescription('Logo');
-
$drawing->setPath('./images/officelogo.jpg');
-
$drawing->setHeight(36);
列寬
將A列寬度設置爲30(字符)。
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
如果需要自動計算列寬,可以這樣:
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
設置默認列寬爲12。
$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
行高
設置第10行行高爲100pt。
$spreadsheet->getActiveSheet()->getRowDimension('10')->setRowHeight(100);
設置默認行高。
$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);
對齊
將A1單元格設置爲水平居中對齊。
-
$styleArray = [
-
'alignment' => [
-
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
-
],
-
];
-
$worksheet->getStyle('A1')->applyFromArray($styleArray);
給多行設置相同樣式的方法,多行設置
$worksheet
->getStyle(
'A1:F15'
)->applyFromArray(
$styleArray
);
合併
將A18到E22合併爲一個單元格。
$spreadsheet->getActiveSheet()->mergeCells('A18:E22');
$worksheet
->getStyle(
'C1'
)->applyFromArray(
$styleArray
);
$spreadsheet
->getActiveSheet()->setCellValue(
'C1'
,
'C1居中'
);
//合併單元格 A7到F7,並且給合併的單元格設值;
$spreadsheet
->getActiveSheet()->mergeCells(
'A7:F7'
);
$spreadsheet
->getActiveSheet()->setCellValue(
'A7'
,
'合併單元格A7到F7'
);
拆分
將合併後的單元格拆分。
$spreadsheet->getActiveSheet()->unmergeCells('A18:E22');
邊框
將B2至G8的區域添加紅色邊框。
-
$styleArray = [
-
'borders' => [
-
'outline' => [
-
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
-
'color' => ['argb' => 'FFFF0000'],
-
],
-
],
-
];
-
$worksheet->getStyle('B2:G8')->applyFromArray($styleArray);
工作表標題
設置當前工作表標題。
$spreadsheet->getActiveSheet()->setTitle('Hello');
日期時間
設置日期格式。
-
$spreadsheet->getActiveSheet()
-
->setCellValue('D1', '2018-06-15');
-
$spreadsheet->getActiveSheet()->getStyle('D1')
-
->getNumberFormat()
-
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDD2);
換行
使用\n
進行單元格內換行,相當於(ALT+"Enter")。
-
$spreadsheet->getActiveSheet()->getCell('A4')->setValue("hello\nworld");
-
$spreadsheet->getActiveSheet()->getStyle('A4')->getAlignment()->setWrapText(true);
超鏈接
將單元格設置爲超鏈接形式。
-
$spreadsheet->getActiveSheet()->setCellValue('E6', 'www.helloweba.net');
-
$spreadsheet->getActiveSheet()->getCell('E6')->getHyperlink()->setUrl('https://www.helloweba.net');
使用函數
使用SUM計算B5到C5之間單元格的總和。其他函數同理:最大數(MAX),最小數(MIN),平均值(AVERAGE)。
-
$spreadsheet->getActiveSheet()
-
->setCellValue('B7', '=SUM(B5:C5)');
//設置F11爲A11到E11之間的總和
$spreadsheet
->getActiveSheet()->setCellValue(
'A11'
, 1);
$spreadsheet
->getActiveSheet()->setCellValue(
'B11'
, 2);
$spreadsheet
->getActiveSheet()->setCellValue(
'C11'
, 3);
$spreadsheet
->getActiveSheet()->setCellValue(
'D11'
, 4);
$spreadsheet
->getActiveSheet()->setCellValue(
'E11'
, 5);
//計算總和
$spreadsheet
->getActiveSheet()->setCellValue(
'F11'
,
'=SUM(A11:E11)'
);
設置文檔屬性
可以設置Excel文檔屬性。
-
$spreadsheet->getProperties()
-
->setCreator("Helloweba") //作者
-
->setLastModifiedBy("Yuegg") //最後修改者
-
->setTitle("Office 2007 XLSX Test Document") //標題
-
->setSubject("Office 2007 XLSX Test Document") //副標題
-
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") //描述
-
->setKeywords("office 2007 openxml php") //關鍵字
-
->setCategory("Test result file"); //分類
此外,除了提供豐富的Excel文件處理接口外,PhpSpreadshee還提供了CSV,PDF,HTML以及XML等文件處理接口。
導入:
-
<?php
-
require 'vendor/autoload.php';
-
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('tmp.xlsx');
-
$sheet = $spreadsheet->getActiveSheet();
-
$data = $sheet->toArray();
-
var_dump($data);
導出:
-
<?php
-
require 'vendor/autoload.php';
-
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
-
$sheet = $spreadsheet->getActiveSheet();
-
$sheet->getDefaultColumnDimension()->setWidth(40);
-
$sheet->getColumnDimensionByColumn(2)->setWidth(100);
-
$sheet->setCellValue('A2', 'Hello World !');
-
for ($i = 1; $i < 10; $i++) {
-
$sheet->setCellValueByColumnAndRow($i, 1, 'Col'.$i);
-
}
-
$fileName = '01simple.xlsx';
-
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
-
header('Content-Disposition: attachment;filename="'. $fileName .'"');
-
header('Cache-Control: max-age=0');
-
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
-
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
-
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
-
header('Pragma: public'); // HTTP/1.0
-
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
-
$writer->save('php://output');
-
exit;
轉載自博客地址:
https://blog.csdn.net/VI7591/article/details/102129994
導出網絡圖片的方法;
拉取oss圖片,使用GD庫讀取圖片
$objDrawing = new MemoryDrawing();
// 圖片生成
$objDrawing->setImageResource($img);
$objDrawing->setRenderingFunction(MemoryDrawing::RENDERING_DEFAULT);//渲染方法
$objDrawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT);
//設置寬度高度
$objDrawing->setHeight(60);//照片高度
$objDrawing->setWidth(60); //照片寬度
// /*設置圖片要插入的單元格*/
$objDrawing->setCoordinates('B'.$k);
// // 圖片偏移距離
$objDrawing->setOffsetX(40);
$objDrawing->setOffsetY(100);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
上述轉載出自出處;https://segmentfault.com/q/1010000018476399?utm_source=tag-newest
有條件地格式化單元格
可以基於特定規則有條件地格式化單元格。例如,如果一個單元格的值小於零,則可以將其設置爲紅色,如果其值爲零或更大,則可以將其設置爲綠色。
可以使用以下代碼爲單元格設置條件樣式規則集:
$conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional();
$conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS);
$conditional1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_LESSTHAN);
$conditional1->addCondition('0');
$conditional1->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
$conditional1->getStyle()->getFont()->setBold(true);
$conditional2 = new \PhpOffice\PhpSpreadsheet\Style\Conditional();
$conditional2->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS);
$conditional2->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_GREATERTHANOREQUAL);
$conditional2->addCondition('0');
$conditional2->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_GREEN);
$conditional2->getStyle()->getFont()->setBold(true);
$conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('B2')->getConditionalStyles();
$conditionalStyles[] = $conditional1;
$conditionalStyles[] = $conditional2;
$spreadsheet->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles);
如果要將規則集複製到其他單元格,則可以複製樣式對象:
$spreadsheet->getActiveSheet()
->duplicateStyle(
$spreadsheet->getActiveSheet()->getStyle('B2'),
'B3:B7'
);
在單元格中添加評論
要將註釋添加到單元格,請使用以下代碼。下面的示例向單元格E11添加註釋:
$spreadsheet->getActiveSheet()
->getComment('E11')
->setAuthor('Mark Baker');
$commentRichText = $spreadsheet->getActiveSheet()
->getComment('E11')
->getText()->createTextRun('PhpSpreadsheet:');
$commentRichText->getFont()->setBold(true);
$spreadsheet->getActiveSheet()
->getComment('E11')
->getText()->createTextRun("\r\n");
$spreadsheet->getActiveSheet()
->getComment('E11')
->getText()->createTextRun('Total amount on the current invoice, excluding VAT.')
將自動過濾器應用於一系列單元格
要將自動過濾器應用於一系列單元格,請使用以下代碼:
$spreadsheet->getActiveSheet()->setAutoFilter('A1:C9');
確保您始終包括完整的過濾器範圍!Excel確實僅支持設置標題行,但這不是最佳實踐。
在電子表格上設置安全性
Excel提供3個級別的“保護”:
- 文檔:允許您在完整的電子表格上設置密碼,僅當輸入該密碼時纔可以進行更改。
- 工作表:提供其他安全選項:您可以禁止在特定工作表上插入行,禁止排序,...
- 單元格:提供用於鎖定/解鎖單元格以及顯示/隱藏內部公式的選項。
有關設置文檔安全性的示例:
$spreadsheet->getSecurity()->setLockWindows(true);
$spreadsheet->getSecurity()->setLockStructure(true);
$spreadsheet->getSecurity()->setWorkbookPassword("PhpSpreadsheet");
有關設置工作表安全性的示例:
$spreadsheet->getActiveSheet()
->getProtection()->setPassword('PhpSpreadsheet');
$spreadsheet->getActiveSheet()
->getProtection()->setSheet(true);
$spreadsheet->getActiveSheet()
->getProtection()->setSort(true);
$spreadsheet->getActiveSheet()
->getProtection()->setInsertRows(true);
$spreadsheet->getActiveSheet()
->getProtection()->setFormatCells(true);
有關設置單元安全性的示例:
$spreadsheet->getActiveSheet()->getStyle('B1')
->getProtection()
->setLocked(\PhpOffice\PhpSpreadsheet\Style\Protection::PROTECTION_UNPROTECTED);
如果需要任何工作表保護功能,請確保啓用工作表保護!可以使用以下代碼完成此操作:
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true);
在單元上設置數據驗證
數據驗證是Xlsx的強大功能。它允許在可以插入特定單元格的數據上指定輸入過濾器。該過濾器可以是一個範圍(即值必須在0到10之間),列表(即值必須從列表中選取),...
以下代碼僅允許在單元格B3中輸入10到20之間的數字:
$validation = $spreadsheet->getActiveSheet()->getCell('B3')
->getDataValidation();
$validation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_WHOLE );
$validation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP );
$validation->setAllowBlank(true);
$validation->setShowInputMessage(true);
$validation->setShowErrorMessage(true);
$validation->setErrorTitle('Input error');
$validation->setError('Number is not allowed!');
$validation->setPromptTitle('Allowed input');
$validation->setPrompt('Only numbers between 10 and 20 are allowed.');
$validation->setFormula1(10);
$validation->setFormula2(20);
以下代碼僅允許從數據列表中選取的項輸入到單元格B5中:
$validation = $spreadsheet->getActiveSheet()->getCell('B5')
->getDataValidation();
$validation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST );
$validation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION );
$validation->setAllowBlank(false);
$validation->setShowInputMessage(true);
$validation->setShowErrorMessage(true);
$validation->setShowDropDown(true);
$validation->setErrorTitle('Input error');
$validation->setError('Value is not in list.');
$validation->setPromptTitle('Pick from list');
$validation->setPrompt('Please pick a value from the drop-down list.');
$validation->setFormula1('"Item A,Item B,Item C"');
當使用上述數據驗證列表時,請確保將列表放在和之間"
,"
並用逗號(,
)分隔項目。
重要的是要記住,參與Excel公式的任何字符串最多可以包含255個字符(而不是字節)。這對字符串“ Item A,Item B,Item C”中可以包含的項目設置了限制。因此,通常最好直接在某個單元格區域(例如A1:A3)中鍵入項目值,而改爲使用 $validation->setFormula1('Sheet!$A$1:$A$3')
。另一個好處是,項目值本身可以包含逗號,
字符本身。
如果您需要在多個單元格上進行數據驗證,則可以克隆規則集:
$spreadsheet->getActiveSheet()->getCell('B8')->setDataValidation(clone $validation);
經常需要使用的excel知識點:(圖片的導出與讀入)
將工程圖添加到工作表
工程圖始終表示爲單獨的對象,可以將其添加到工作表中。因此,您必須首先實例化new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing
,然後爲其屬性分配一個有意義的值:
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('Logo');
$drawing->setDescription('Logo');
$drawing->setPath('./images/officelogo.jpg');
$drawing->setHeight(36);
要將上述圖形添加到工作表中,請使用以下代碼片段。PhpSpreadsheet在圖形和工作表之間創建鏈接:
$drawing->setWorksheet($spreadsheet->getActiveSheet());
您可以在工程圖上設置許多屬性,以下是一些示例:
$drawing->setName('Paid');
$drawing->setDescription('Paid');
$drawing->setPath('./images/paid.png');
$drawing->setCoordinates('B15');
$drawing->setOffsetX(110);
$drawing->setRotation(25);
$drawing->getShadow()->setVisible(true);
$drawing->getShadow()->setDirection(45);
您也可以添加使用GD功能創建的圖像,而無需先將它們作爲內存中圖形保存到磁盤。
// Use GD to create an in-memory image
$gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
$textColor = imagecolorallocate($gdImage, 255, 255, 255);
imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor);
// Add the In-Memory image to a worksheet
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing();
$drawing->setName('In-Memory image 1');
$drawing->setDescription('In-Memory image 1');
$drawing->setCoordinates('A1');
$drawing->setImageResource($gdImage);
$drawing->setRenderingFunction(
\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG
);
$drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT);
$drawing->setHeight(36);
$drawing->setWorksheet($spreadsheet->getActiveSheet());
從工作表中讀取圖像
一個常見的問題是如何從已加載的工作簿中檢索圖像,並將其作爲單獨的圖像文件保存到磁盤。
以下代碼從當前活動的工作表中提取圖像,並將每個圖像寫爲一個單獨的文件。
$i = 0;
foreach ($spreadsheet->getActiveSheet()->getDrawingCollection() as $drawing) {
if ($drawing instanceof \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing) {
ob_start();
call_user_func(
$drawing->getRenderingFunction(),
$drawing->getImageResource()
);
$imageContents = ob_get_contents();
ob_end_clean();
switch ($drawing->getMimeType()) {
case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_PNG :
$extension = 'png';
break;
case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_GIF:
$extension = 'gif';
break;
case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_JPEG :
$extension = 'jpg';
break;
}
} else {
$zipReader = fopen($drawing->getPath(),'r');
$imageContents = '';
while (!feof($zipReader)) {
$imageContents .= fread($zipReader,1024);
}
fclose($zipReader);
$extension = $drawing->getExtension();
}
$myFileName = '00_Image_'.++$i.'.'.$extension;
file_put_contents($myFileName,$imageContents);
}
向單元格添加富文本
可以使用\PhpOffice\PhpSpreadsheet\RichText\RichText
實例將富文本添加到單元格 。這是一個示例,它創建以下富文本字符串:
除非發票上另有說明,否則該發票應在月底後的三十天內支付。
$richText = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
$richText->createText('This invoice is ');
$payable = $richText->createTextRun('payable within thirty days after the end of the month');
$payable->getFont()->setBold(true);
$payable->getFont()->setItalic(true);
$payable->getFont()->setColor( new \PhpOffice\PhpSpreadsheet\Style\Color( \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_DARKGREEN ) );
$richText->createText(', unless specified otherwise on the invoice.');
$spreadsheet->getActiveSheet()->getCell('A18')->setValue($richText);
定義一個命名範圍
PhpSpreadsheet支持命名範圍的定義。可以使用以下代碼定義它們:
// Add some data
$spreadsheet->setActiveSheetIndex(0);
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Firstname:');
$spreadsheet->getActiveSheet()->setCellValue('A2', 'Lastname:');
$spreadsheet->getActiveSheet()->setCellValue('B1', 'Maarten');
$spreadsheet->getActiveSheet()->setCellValue('B2', 'Balliauw');
// Define named ranges
$spreadsheet->addNamedRange( new \PhpOffice\PhpSpreadsheet\NamedRange('PersonFN', $spreadsheet->getActiveSheet(), 'B1') );
$spreadsheet->addNamedRange( new \PhpOffice\PhpSpreadsheet\NamedRange('PersonLN', $spreadsheet->getActiveSheet(), 'B2') );
可選地,可以傳遞第四個參數來定義本地命名範圍(即僅在當前工作表上可用)。默認情況下,命名範圍是全局的。
將輸出重定向到客戶端的Web瀏覽器
有時,人們確實希望將文件輸出到客戶的瀏覽器,尤其是在動態創建電子表格時。有一些簡單的步驟可以執行以下操作:
- 創建您的PhpSpreadsheet電子表格
- 輸出您要輸出的文檔類型的HTTP標頭
- 使用
\PhpOffice\PhpSpreadsheet\Writer\*
您選擇的,然後保存到'php://output'
\PhpOffice\PhpSpreadsheet\Writer\Xlsx
寫入時使用臨時存儲php://output
。默認情況下,臨時文件存儲在腳本的工作目錄中。如果沒有訪問權限,它將退回到操作系統的臨時文件位置。
未經授權觀看可能不安全!根據您操作系統的配置,任何人都可以使用同一臨時存儲文件夾讀取臨時存儲。當需要對文檔保密時,建議不要使用php://output
。
HTTP標頭
將Excel 2007文件重定向到客戶端瀏覽器的腳本示例:
/* Here there will be some code where you create $spreadsheet */
// redirect output to client browser
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="myfile.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
將Xls文件重定向到客戶端瀏覽器的腳本示例:
/* Here there will be some code where you create $spreadsheet */
// redirect output to client browser
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="myfile.xls"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');
將GD工程圖添加到工作表
在某些情況下,您可能想使用GD生成內存中映像並將其添加到中,Spreadsheet
而無需先將此文件保存到臨時位置。
這是一個在內存中生成圖像並將其添加到活動工作表的示例:
// Generate an image
$gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
$textColor = imagecolorallocate($gdImage, 255, 255, 255);
imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor);
// Add a drawing to the worksheet
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing();
$drawing->setName('Sample image');
$drawing->setDescription('Sample image');
$drawing->setImageResource($gdImage);
$drawing->setRenderingFunction(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG);
$drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT);
$drawing->setHeight(36);
$drawing->setWorksheet($spreadsheet->getActiveSheet());
設置工作表縮放級別
要設置工作表的縮放級別,可以使用以下代碼:
$spreadsheet->getActiveSheet()->getSheetView()->setZoomScale(75);
請注意,縮放級別應在10-400的範圍內。
工作表標籤顏色
有時您想爲工作表標籤設置顏色。例如,您可以有一個紅色工作表標籤:
$worksheet->getTabColor()->setRGB('FF0000');
在工作簿中創建工作表
如果您需要在工作簿中創建更多工作表,請按照以下步驟操作:
$worksheet1 = $spreadsheet->createSheet();
$worksheet1->setTitle('Another sheet');
可以將其createSheet()
視爲Excel中的“插入工作表”按鈕。當您單擊該按鈕時,新的工作表將添加到工作簿中現有的工作表集合中。
隱藏的工作表(Sheet狀態)
使用以下代碼將工作表設置爲隱藏:
$spreadsheet->getActiveSheet()
->setSheetState(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN);
有時,您甚至可能希望工作表“非常隱藏”。可用的工作表狀態爲:
\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_VISIBLE
\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN
\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_VERYHIDDEN
在Excel中,只能以編程方式(例如,使用Visual Basic Macro)設置工作表狀態“非常隱藏”。不能通過用戶界面使此類工作表可見。
從右到左的工作表
可以分別設置工作表,無論列A
應從左側還是右側開始。保留默認值。這是從右到左設置列的方法。
// right-to-left worksheet
$spreadsheet->getActiveSheet()->setRightToLeft(true);
上述轉載出自博客地址:https://www.cnblogs.com/zx-admin/p/11653863.html
導出一組圖片參考博客地址:PhpSpreadsheet 導出圖片到 Excel,https://learnku.com/articles/26965
導入包含圖片的excel表格詳細參考方法
導入包含圖片的excel表格詳細參考方法;參考博客地址:https://www.cnblogs.com/myIvan/p/11431248.html
use PhpOffice\PhpSpreadsheet\Reader\Xls;
獲取到文件地址
$file = '/uploads/201908/13355zz.xls'’;
if (!$file) {
$this->error(__('Parameter %s can not be empty', 'file'));
}
$inputFileName = ROOT_PATH . DS . 'public' . DS . $file;
if (!is_file($inputFileName)) {
$this->error(__('No results were found'));
}
//實例化reader
$ext = pathinfo($inputFileName, PATHINFO_EXTENSION);
if (!in_array($ext, ['xls'])) {
$this->error(__('Unknown data format'));
}
$reader = new Xls();
// 讀取excel文件
try {
if (!$PHPExcel = $reader->load($inputFileName)) {
$this->error(__('Unknown data format'));
}
$sheet = $PHPExcel->getSheet(0);
} catch(Exception $e) {
die('加載文件發生錯誤:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}
從excel文件裏讀取數據,圖片單獨處理(進行上傳保存)
$data=$sheet->toArray();//該方法讀取不到圖片 圖片需單獨處理
/*************圖片單獨處理開始*****************/
$imageFilePath=ROOT_PATH.'/public/uploads/images/' ;//圖片保存目錄
if (!file_exists ( $imageFilePath )) {
mkdir("$imageFilePath", 0777, true);
}
//處理圖片
foreach($sheet->getDrawingCollection() as $img) {
list($startColumn,$startRow)= PHPExcel_Cell::coordinateFromString($img->getCoordinates());//獲取圖片所在行和列
$imageFileName = Random::uuid();//圖片名字隨機生成,如果你沒這個類,自己用其他隨機函數生成
switch($img->getMimeType()) {
case 'image/jpg':
case 'image/jpeg':
$imageFileName.='.jpg';
imagejpeg($img->getImageResource(),$imageFilePath.$imageFileName);
break;
case 'image/gif':
$imageFileName.='.gif';
imagegif($img->getImageResource(),$imageFilePath.$imageFileName);
break;
case 'image/png':
$imageFileName.='.png';
imagepng($img->getImageResource(),$imageFilePath.$imageFileName);
break;
}
$startColumn = ABC2decimal($startColumn);//由於圖片所在位置的列號爲字母,轉化爲數字
$data[$startRow-1][$startColumn]='/uploads/images/'.$imageFileName;//把圖片插入到數組中
}
/*************圖片單獨處理結束*****************/
然後打印$data 就會發現 圖片那一欄的值都變成了 圖片所在的地址。後面就直接整理數據插入數據庫。