找回密码
 立即注册
搜索
查看: 576|回复: 0

[composer组件] PHP操作excel推荐使用phpoffice组件,不推荐使用phpexcel

  [复制链接]
发表于 2023-2-23 19:46 | 显示全部楼层 |阅读模式

由于phpexcel官方已经不再维护,建议所有新项目都使用phpoffice。

在些记录一下相关操作(复制过去就可以使用,尽量减少不必要的开发时间):

在调试设置时,确保引入了正确的文件并实例化。

use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();

字体

第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); //将文字颜色设置为红色。

$worksheet->getStyle('A4')->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('76933C');//单元格背景颜色

//单元格背景颜色+边框
$styleArray = [
    'borders' => [//边框
        'outline' => [
            'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
            'color' => ['argb' => '00000000'],
        ],
    ],
    'fill' => [
        'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
        'rotation' => 90,
        'startColor' => [
            'argb' => '76933C',
        ],
        'endColor' => [
            'argb' => '76933C',
        ],
    ],
    'alignment' => [
        'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,//水平对齐
        'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,//上下居中
    ],
];
$worksheet->getStyle('A4')->applyFromArray($styleArray);

图片

可以将图片加载到Excel中。

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('Logo');
$drawing->setDescription('Logo');
$drawing->setPath('./images/officelogo.jpg');//这里的地址只能是本地服务器的地址不能是http网络地址
$drawing->setHeight(36);
$drawing->setCoordinates('E' . $row);//哪一列哪一行
$drawing->setWorksheet($worksheet);
$worksheet->getRowDimension($row)->setRowHeight(60);
unset($drawing);

列宽

将A列宽度设置为30(字符)。

$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);

如果需要自动计算列宽,可以这样:

$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);

设置默认列宽为12。

$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
$worksheet->getColumnDimension($k)->setWidth(12);//列宽

行高

设置第10行行高为100pt。

$spreadsheet->getActiveSheet()->getRowDimension('10')->setRowHeight(100);

设置默认行高。

$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);
$worksheet->getRowDimension($startRow)->setRowHeight(25);//行高

对齐

将A1单元格设置为水平居中对齐。

$styleArray = ['alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,],];
$worksheet->getStyle('A1')->applyFromArray($styleArray);

合并

将A18到E22合并为一个单元格(注意:合并为一个单元格后,再设置值的时候,单元格为A18)。

$spreadsheet->getActiveSheet()->mergeCells('A18:E22');

拆分

将合并后的单元格拆分。

$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.phpshiti.com'); 
$spreadsheet->getActiveSheet()->getCell('E6')->getHyperlink()->setUrl('https://www.phpshiti.com');

使用函数

使用SUM计算B5到C5之间单元格的总和。其他函数同理:最大数(MAX),最小数(MIN),平均值(AVERAGE)。

$spreadsheet->getActiveSheet()->setCellValue('B7', '=SUM(B5:C5)');

设置文档属性

可以设置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"); //分类

设置提示

To add a comment to a cell, use the following code. The example below adds a comment to cell 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.');

08-cell-comment.png

 

此外,除了提供丰富的Excel文件处理接口外,PhpSpreadshee还提供了CSV,PDF,HTML以及XML等文件处理接口。

更多使用设置请参照官网文档:https://phpspreadsheet.readthedocs.io/en/stable/

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-12-21 21:43 , Processed in 0.028478 second(s), 14 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表