PhpSpreadsheet实现Excel操作

PhpSpreadsheet是一个用纯PHP编写的库,并引入了命名空间,PSR规范等。

以下内容简单介绍一下PhpSpreadsheet的使用。

安装扩展

使用composer安装phpSpreadsheet

composer require phpoffice/phpspreadsheet

安装成功后会在vendor\phpoffice\phpspreadsheet目录下看到扩展文件。

引入扩展

在使用是根据命名空间引入phpspreadsheet扩展

use PhpOffice\PhpSpreadsheet\IOFactory;

读取数据

读功能支持文件后缀为Xlsx、Xls、’Xml、Ods、Slk、Html、Csv、Gnumeric类型的文件。

$file_name='E:\test1.xlsx';
$sheel=IOFactory::createReader('Xlsx');//创建读权限
$spreadsheet = $sheel->load($file_name);//指定要操作的文件
$sheet = $spreadsheet->getSheet(0);//设置读取工作簿,从0开始指定要读取的工作簿
$count = $sheet->getHighestRow();//获取最高工作表行
$value = $sheet->getCell('A1')->getValue();//读取单元格内容

写入数据

写功能支持文件后缀为Xlsx、Xls、Ods、Html、Csv、Gnumeric、Tcpdf、Dompdf、Mpdf类型的文件。

use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();//创建一个新的工作表
$sheet->setCellValue('A1', '1表格');//设置单元格内容
$sheel = IOFactory::createWriter($spreadsheet,'Xlsx');//写入
$sheel->save('E:\test1.xlsx');//输出到工作表(新建)

案例

结果:输出一个课程表格

输出效果:

相关代码:

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();//创建一个新的工作表

$spreadsheet->getDefaultStyle()->getFont()->setName('微软雅黑'); //修改默认字体

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

$sheet -> setCellValue('A1', '课程表');//设置单元格内容

//设置全局单元格内容居中
$styleArray_a1=[
    'alignment'=>[
        'horizontal'=>Alignment::HORIZONTAL_CENTER,//水平居中
        'vertical'=>Alignment::VERTICAL_CENTER,//垂直居中
    ],
];
$sheet -> getStyle('A1:F12') -> applyFromArray($styleArray_a1);

//设置表格顶部
$sheet->getStyle('A1:F1')->getFont()
    ->setBold(true)->setName('黑体')
    ->setSize(18);//设置A1:B1区域的字体为黑体加粗10px

$sheet->getStyle('A1:F1')->getFont()
    ->getColor()->setARGB(Color::NAMED_COLOR_TRANSLATIONS['Blue']);//设置单元格A1:F1字体颜色

//设置表格主体标题
$styleArray = [
    'borders' => [//设置单元格边框
        'outline' => [//外边框
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['argb' => '31869b'],
        ],
        'inside' => [//内边框
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['argb' => '3ba0b9'],
        ]
    ],
    'font'=>[
        'name'=>'微软雅黑',
        'bold'=>true,
        'size'=>'13',
        'color'=>['argb' => Color::COLOR_WHITE]
    ]
];
$sheet -> getStyle('A2:F2') -> applyFromArray($styleArray);

$sheet -> getStyle('A2:F2') -> getFill()
    -> setFillType(Fill::FILL_SOLID)
    -> getStartColor() -> setARGB('31869b');//设置单元格背景色

$rowArray=['星期一','星期二','星期三','星期四','星期五'];
$spreadsheet->getActiveSheet()->fromArray($rowArray, NULL,'B2');

$sheet -> mergeCells('A4:A7'); //合并单元格
$sheet -> mergeCells('A8:A11'); //合并单元格

$sheet -> setCellValueByColumnAndRow(1,3,'早自习');//设置单元格内容根据行和列赋值
$sheet -> setCellValueByColumnAndRow(1,4,'上午');//设置单元格内容根据行和列赋值
$sheet -> setCellValueByColumnAndRow(1,8,'下午');//设置单元格内容根据行和列赋值
        $sheet -> setCellValueByColumnAndRow(1,12,'晚自习');//设置单元格内容根据行和列赋值
        
$sheet -> getDefaultColumnDimension() -> setWidth(14); //设置默认列宽为14

$sheet -> getRowDimension('1') -> setRowHeight(35); //设置第1行高度为35
$sheet -> getDefaultRowDimension() -> setRowHeight(28); //设置默认行高为28

$styleArray = [
    'borders' => [
        'outline' => [//外边框
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['argb' => '7ec0d1'],
        ],
        'inside' => [//内边框
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['argb' => '99bec7'],
        ]
    ],
];
$sheet -> getStyle('A3:F12') -> applyFromArray($styleArray);//设置单元格边框

$sheet -> getStyle('A3:F12') -> getFill()
    -> setFillType(Fill::FILL_SOLID)
    -> getStartColor() -> setARGB('e5faff');//设置单元格背景色

$sheel = IOFactory::createWriter($spreadsheet,'Xlsx');//写入
$sheel -> save('E:\test1.xlsx');//输出到工作表(新建)

注:此工作表为新建工作表,如果此文件已存在会删除之后新建保存。

命令总结

注:get是获取,set为设置

  • 设置单元格的值

//方式一
$sheet -> getCellByColumnAndRow(1,2)->setValue('内容');//列,行
//方式二
$sheet -> getCell('A3')->setValue('郭靖');
//方式三
$sheet -> setCellValueByColumnAndRow(1,3,'早自习');//列,行
//方式四
$sheet -> setCellValue('A1', '课程\n表');
//设置文本里的\n符合为:换行
$sheet->getStyle('A1')->getAlignment()->setWrapText(true); 
  • 获取单元格的值

//方式一
$sheet->getCell('A1')->getValue();
//方式二
$sheet->getCell('A1')->getCoordinate();
  • 设置单元格文字样式

//方式一
$sheet->getStyle('B2')->getFont()->setBold(true)->setName('宋体')->setSize(20);
//方式二
 $styleArray = [
    'font'=>[
        'name'=>'微软雅黑',
        'bold'=>true,
        'size'=>'13',
        'color'=>['argb' => Color::COLOR_WHITE]
    ]
];
$sheet -> getStyle('A2:F2') -> applyFromArray($styleArray);
  • 设置单元格格式(日期时间)

//方式一
$sheet->getStyle('A2')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberF
  • 单元格链接

//getHyperlink 获取单元格链接
//setUrl设置单元格链接
$sheet->getCell('A1')->getHyperlink()->setUrl('https://www.baidu.com/');
  • 批量设置单元格值

$arrayData = [
    [NULL, '语文', '数学', '英语'],
    ['张一',   12,   15,   21],
    ['张二',   56,   73,   86],
];
$sheet->fromArray($arrayData,NULL,'C2');//C2开始位置
  • 表格样式

$sheet -> getRowDimension(1) -> setRowHeight(35); //设置第1行高度为35
$sheet -> getColumnDimension('B')-> setAutoSize(true);//自动设置B列宽度
$sheet -> getDefaultRowDimension() -> setRowHeight(30); //设置默认行高为30
$sheet -> getDefaultColumnDimension() -> setWidth(10); //设置默认列宽为14
$sheet -> getColumnDimension('A') -> setWidth(14); //设置A列宽度为15
$sheet -> mergeCells('A4:A7');//合并单元格
$sheet -> unmergeCells('C3:G3'); //拆分单元格
//设置全局单元格内容居中
$styleArray_a1=[
    'alignment'=>[
        'horizontal'=>Alignment::HORIZONTAL_CENTER,//水平居中
        'vertical'=>Alignment::VERTICAL_CENTER,//垂直居中
    ],
];
$sheet -> getStyle('A1:F12') -> applyFromArray($styleArray_a1);
  • applyFromArray 应用数组中的样式

    支持font、alignment、borders、fill、numberFormat、protection、quotePrefx的设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值