简介
PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格、生成统计图表,非常适合用于做报表。
安装&配置
- 该项目的GitHub地址是:https://github.com/Maatwebsite/Laravel-Excel
- 使用composer安装 : composer require maatwebsite/excel ~2.0.0(laravel版本不同Excel可能不一样)
安装后的设置
2.1 在config/app.php中注册服务提供者到providers数组:
Maatwebsite\Excel\ExcelServiceProvider::class,
2.2 同样在config/app.php中注册门面到aliases数组:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
- 这样PHPExcel就可以在项目中使用,简单的使用可以参考:例子
属性
public function excel()
{
// 数据格式
$cellData = [
['学号','姓名','成绩'],
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
// 可以使用create文件名作为第一个参数的方法创建一个新的文件
Excel::create('学生成绩',function($excel) use ($cellData){
/*********** 表的说明 ***************/
// 表的标题
$excel->setTitle('student score');
// 作者
$excel->setCreator('zhang')
->setCompany('mathphp');
// 备注
$excel->setDescription('A demonstration to change the file properties');
// 调用PHPExcel的本机方法:呼吁所有的本地PHPExcel方法$excel。
// $excel->getDefaultStyle();
// 在新创建的excel文件中创建一个新的工作表,请使用type参数的->sheet('表名')回调LaravelExcelWorksheet
$excel->sheet('表1', function($sheet) use ($cellData){
// 调用工作表方法
// $sheet->protectCells('A1', $password);
// 从数组中创建一个新的文件,使用
//->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)在sheet中;
//或者您可以使用->with()。
// 空比较:默认情况下,0显示为空单元格。如果要更改此行为,可以将第四个参数作为true:
$sheet->fromArray(array(
array('data1', 'data2'),
array('data3', 'data4')
));
//第一个参数是数组,第2个参数设定的值和数组的值相同则会清除掉,
// 第3个是从哪一格开始, 第4个是显示0,fasle表示不显示0
例子: $cellData = [];
foreach ($data as $v) {
$cell = [];
$cell['ID'] = $v->uid;
$cell['昵称'] = $v->nickname;
$cellData[] = $cell;
}
$sheet->fromArray($cellData, null, 'A1', true);
// 这种输出比 $sheet->rows() 灵活。
/********** 表格样式 ***********/
// 如果要更改工作表的一般样式(不是单元格或范围特定),则可以使用该->setStyle()方法。
$sheet->setStyle(array(
'font' => array(
'name' => 'Calibri',
'size' => 15,
'bold' => true
)
));
// $sheet->setFont(array(
// 'family' => 'Calibri',
// 'size' => '15',
// 'bold' => true
// ));
// 为工作表设置边框
// $sheet->setBorder('A1:F10', 'thin');
// 单元格大小
// $sheet->setWidth(array(
// 'A' => 5,
// 'B' => 10
// ));
// 设置行高
// $sheet->setHeight(array(
// 1 => 50,
// 2 => 25
// ));
// 设置单元格大小
// $sheet->setSize(array(
// 'A1' => array(
// 'width' => 50,
// 'height' => 500
// )
// ));
// 默认情况下,导出的文件将自动调整大小。要更改此行为,您可以更改配置或使用设置器:
// $sheet->setAutoSize(false);
// $sheet->setAutoSize(array(
// 'A', 'C'
// ));
// 列合并
// $sheet->mergeCells('A1:E1');
// 合并列和行
// $sheet->setMergeColumn(array(
// 'columns' => array('A','B','C','D'),
// 'rows' => array(
// array(2,3),
// array(5,11),
// )
// ));
// 列格式化
// $sheet->setColumnFormat(array(
// 'C' => '0%'
// ));
// $sheet->setColumnFormat(array(
// 'A2:K2' => '0000'
// ));
// $sheet->setColumnFormat(array(
// 'B' => '0',
// 'D' => '0.00',
// 'F' => '@',
// 'F' => 'yyyy-mm-dd',
// ));
// *******操纵某行:更改单元格值***************
$sheet->row(1, array(
'test1', 'test2'
));
// 更改行的单元格背景
$sheet->row(1, function($row) {
$row->setBackground('#000000');
});
// 追加行,不加第一个参数默认追加到追后
$sheet->appendRow(6, array(
'appended', 'appended'
));
// 前置行
$sheet->prependRow(1, array(
'prepended', 'prepended'
));
// 附加多行
$sheet->rows(array(
array('test1', 'test2'),
array('test3', 'test4')
));
// 冻结行
// $sheet->freezeFirstRow();
// $sheet->freezeFirstColumn();
// $sheet->freezeFirstRowAndColumn();
// $sheet->setFreeze('A2');
/*********** 单元格操作 ***************/
$sheet->cell('A1', function($cell) {
$cell->setValue('cell1');
});
$sheet->cells('A1:A5', function($cells) {
$cells->setFontColor('#ffffff');
$cells->setBackground('#444');
$cells->setFontFamily('Calibri');
$cells->setFontSize(16);
// 字体统一操作
// $cells->setFont(array(
// 'family' => 'Calibri',
// 'size' => '16',
// 'bold' => true
// ));
// 单元格边框
$cells->setBorder(array(
'top' => array(
'style' => 'solid'
),
));
// 水平对齐
$cells->setAlignment('center');
// 垂直对齐
$cells->setValignment('center');
});
// 自动过滤
// $sheet->setAutoFilter();
// $sheet->setAutoFilter('A1:E10');
// 默认页边距:可以在配置文件中设置默认的页边距excel::export.sheets。
//它接受布尔值,单值或数组。要手动设置页边距,可以使用:->setPageMargin()
$sheet->setPageMargin(array(
0.25, 0.30, 0.25, 1
));
$sheet->rows($cellData);
});
// 创建多张表:可以在文件中设置任意数量的表格:
$excel->sheet('表2', function($sheet) use ($cellData){
// 密码保护工作表(只能读,不能写):一张表可以受密码保护$sheet->protect('密码'):
$sheet->protect('123', function(\PHPExcel_Worksheet_Protection $protection) {
$protection->setSort(true);
});
$sheet->rows($cellData);
});
// 导出表 ->download('csv') or
})->export('xls');
}