使用PHPSpreadsheet为ODS文件添加边框失败,XLSX格式正常
PHPSpreadsheet ODS文件边框不生效的解决方案
你遇到的问题是因为PHPSpreadsheet的ODS写入器不支持allBorders这种快捷样式设置,而Xlsx写入器兼容这个属性。要给ODS文件添加边框,需要拆分边框设置,明确指定外边框和内边框的样式,同时规范颜色参数的写法。
修改后的代码示例:
$spreadsheet = new Spreadsheet(); $activeWorksheet = $spreadsheet->getActiveSheet(); $styleArray = [ 'borders' => [ // 设置区域外边框 'outline' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], // 设置区域内边框 'inside' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], ], ]; $activeWorksheet->getStyle('A1:E28')->applyFromArray($styleArray); // 保存为ODS文件 $writer = new \PhpOffice\PhpSpreadsheet\Writer\Ods($spreadsheet); $writer->save('target_file.ods');
也可以逐个指定所有边框方向,效果一致:
$styleArray = [ 'borders' => [ 'top' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], 'bottom' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], 'left' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], 'right' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], 'vertical' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], 'horizontal' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_BLACK], ], ], ];
注意:原代码中颜色参数的写法不规范,ODS写入器要求必须通过argb键指定颜色值,否则无法正确解析。
内容的提问来源于stack exchange,提问作者kcp
相关产品推荐
相关产品推荐

