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的设置。