ThinkPHP 6.0 phpspreadsheet操作Excel表格实例

欧阳衡
2023-12-01

在 ThinkPHP 6.0 中实现 excel 导出功能,需要使用第三方扩展phpspreadsheet。

安装和导入导出就不再讲解了,可以看这两篇:

《ThinkPHP6 excel 导入功能完整实现》

《ThinkPHP6 excel 导出功能完整实现》

本文主要讲解如何操作Excel文件表格。

1.PhpSpreadsheet 官网

Welcome to PhpSpreadsheet's documentation - PhpSpreadsheet Documentation

 

2.加载依赖

use PhpOffice\PhpSpreadsheet\Spreadsheet;

3.实例化

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

4.获取工作薄

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Sheet1');

5.获取、设置单元格

// 获取单元格
$cell = $sheet->getCell('A1');
// 设置值
$cell->setValue('张三');

// 获取单元格
$cell = $sheet->getCellByColumnAndRow(1,2);
// 设置值
$cell->setValue('李四');

// 设置单元格值(位置,值)
$sheet->setCellValue('A1','ID');
$sheet->setCellValue('B1','姓名');

// 设置单元格值(列,行,值)
$sheet->setCellValueByColumnAndRow(1, 2, 1);
$sheet->setCellValueByColumnAndRow(2, 3, '张三');

6.设置文字样式

// 宋体 加粗 24号
$sheet->getStyle('A1')
    ->getFont()
    ->setName('宋体')
    ->setBold(true)
    ->setSize(24);

7.文字颜色

$sheet->setCellValue('A1', '张三');
$sheet->setCellValue('A2', '张三');
$sheet->setCellValue('B1', '李四');
$sheet->setCellValue('B2', '李四');


// RGB颜色获取和设置
$sheet->getStyle('A1')->getFont()->getColor()->setRGB('red');
$sheet->getStyle('A2')->getFont()->getColor()->setRGB('AEEEEE');

// AGRB颜色获取和设置
$sheet->getStyle('B1')->getFont()->getColor()->setARGB('72ece9');
$sheet->getStyle('B2')->getFont()->getColor()->setARGB('blue');

8.单元格格式

$sheet->setCellValue('A1','2023-2-21 10:10:10');

$sheet->setCellValue('A2','199.98');

$sheet->getStyle('A1')->getNumberFormat()
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDD2);

$sheet->getStyle('A2')->getNumberFormat()
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);

9.设置超链接

$sheet->setCellValue('A1','CSDN');
$sheet->getCell('A1')->getHyperlink()->setUrl('https://blog.csdn.net/json_ligege');

10.使用公式

$sheet->setCellValue('A1','名单');
$sheet->setCellValue('B1','分数');

$sheet->setCellValueByColumnAndRow(1, 2, '张三');
$sheet->setCellValueByColumnAndRow(2, 2, '80');

$sheet->setCellValueByColumnAndRow(1, 3, '李四');
$sheet->setCellValueByColumnAndRow(2, 3, '79');

$sheet->setCellValueByColumnAndRow(1, 4, '王五');
$sheet->setCellValueByColumnAndRow(2, 4, '93');

$sheet->setCellValueByColumnAndRow(1, 5, '赵六');
$sheet->setCellValueByColumnAndRow(2, 5, '68');

$sheet->setCellValueByColumnAndRow(1, 6, '孙琦');
$sheet->setCellValueByColumnAndRow(2, 6, '89');

$sheet->setCellValueByColumnAndRow(1, 7, '何八');
$sheet->setCellValueByColumnAndRow(2, 7, '90');

$sheet->setCellValue('A8', '总数:');
$sheet->setCellValue('B8', '=SUM(B2:B7)');
$sheet->setCellValue('A9', '平均数:');
$sheet->setCellValue('B9', '=AVERAGE(B2:B7)');
$sheet->setCellValue('A10', '最小数:');
$sheet->setCellValue('B10', '=MIN(B2:B7)');
$sheet->setCellValue('A11', '最大数:');
$sheet->setCellValue('B11', '=MAX(B2:B7)');

11.批量赋值

$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', '姓名');
$sheet->setCellValue('C1', '性别');
$sheet->setCellValue('D1', '职业');

// 参数(单元格数据,表示空白单元格的值,单元格开始位置)
$sheet->fromArray(
    [
        [1, '李云龙', '男', '军人'],
        [2, '苏乞儿', '男', '乞丐'],
        [3, '周星驰', '男', '导演'],
        [4, '林允儿', '女', '演员'],
    ],
    6,
    'A2'
);

12.合并、拆分单元格

// 合并单元格
$sheet->mergeCells('A1:F1');
$sheet->setCellValue('A1','标题');

// 拆分单元格
$sheet->mergeCells('A2:F2');
$sheet->unmergeCells('A2:F2');

13.行操作

// 设置行高度
$sheet->getRowDimension(1)->setRowHeight(30);
// 设置默认行高
$sheet->getDefaultRowDimension()->setRowHeight(20);
// 获取行高度
echo $sheet->getRowDimension(1)->getRowHeight();
// 获取总行数
echo $sheet->getHighestRow();die;

14.列操作

// 设置列宽度
$sheet->getColumnDimension('A')->setWidth(50);
// 设置列自动宽度
$sheet->getColumnDimension('B')->setAutoSize(true);
// 设置列默认宽度
$sheet->getDefaultColumnDimension()->setWidth(20);
// 获取列宽度
echo $sheet->getColumnDimension('A')->getWidth();
// 获取总列数
echo $sheet->getHighestColumn();die;

15.单元格样式

$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', '姓名');
$sheet->setCellValue('C1', '性别');
$sheet->setCellValue('D1', '职业');

$sheet->fromArray(
    [
        [1, '李云龙', '男', '军人'],
        [2, '苏乞儿', '男', '乞丐'],
        [3, '周星驰', '男', '导演'],
        [4, '林允儿', '女', '演员'],
    ],
    6,
    'A2'
);

$styleArray = [
    'alignment' =>  [
        'horizontal' =>  'center',  // 水平居中
        'vertical' =>  'center',    // 垂直居中
    ],
    'font' =>  [
        'name' =>  '宋体',
        'bold' =>  true,
        'size' =>  22
    ]
];

$sheet->getStyle(1)->applyFromArray($styleArray);

总结:

ThinkPHP 6.0 phpspreadsheet操作Excel表格实例到此为止,目前总结了这些常用的操作,更多需要可以查看官网文档;本来是想做一个通过模板导出Excel文件的功能,但是没找到怎么做,不过目前也可以达到我想要的效果了;先这样吧,如果后面实现了,就再写一篇。

借鉴文章:

PHP使用PhpSpreadsheet操作Excel实例详解 - 腾讯云开发者社区-腾讯云

 类似资料: