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等文件处理接口。
导入:
require 'vendor/autoload.php';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('tmp.xlsx');
$sheet = $spreadsheet->getActiveSheet();
$data = $sheet->toArray();
var_dump($data);
导出:
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
导出网络图片的方法;
$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);
工程图始终表示为单独的对象,可以将其添加到工作表中。因此,您必须首先实例化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') );
可选地,可以传递第四个参数来定义本地命名范围(即仅在当前工作表上可用)。默认情况下,命名范围是全局的。
有时,人们确实希望将文件输出到客户的浏览器,尤其是在动态创建电子表格时。有一些简单的步骤可以执行以下操作:
\PhpOffice\PhpSpreadsheet\Writer\*
您选择的,然后保存到'php://output'
\PhpOffice\PhpSpreadsheet\Writer\Xlsx
写入时使用临时存储php://output
。默认情况下,临时文件存储在脚本的工作目录中。如果没有访问权限,它将退回到操作系统的临时文件位置。
未经授权观看可能不安全!根据您操作系统的配置,任何人都可以使用同一临时存储文件夹读取临时存储。当需要对文档保密时,建议不要使用php://output
。
将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生成内存中映像并将其添加到中,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中的“插入工作表”按钮。当您单击该按钮时,新的工作表将添加到工作簿中现有的工作表集合中。
使用以下代码将工作表设置为隐藏:
$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表格详细参考方法;参考博客地址: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 就会发现 图片那一栏的值都变成了 图片所在的地址。后面就直接整理数据插入数据库。