我想用 Laravel Excel 导出结果,但结果与我想要的不符。
我希望所有单元格都包含在文本中并具有完整的边框。
这是我的代码:
class SdgsExportView2 implements FromView, WithTitle {
protected $id_perangkat_daerah;
function __construct($id_perangkat_daerah) {
$this->id_perangkat_daerah = $id_perangkat_daerah;
}
public function view(): View
{
$data_sdgs = DataSdgs::where('id_perangkat_daerah',$this->id_perangkat_daerah)
->with('indikator.target.sdgs')
->with('detail_data_sdgs.kegiatan.program.perangkat_daerah')
->get();
return view('template.exportMatrik2', [
'data_sdgs' => $data_sdgs
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
$cellRange = 'A1:W100'; // All headers
$event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
$event->sheet->getDelegate()->getStyle($cellRange)->getAlignment()->setWrapText(true);
}
];
}
public function title() : string
{
return 'MATRIK 2';
}
}
我真的希望得到你的帮助
我知道现在回答有点晚了(8个月后),但是向代码添加边框格式相对简单。 在您的事件函数
AfterSheet::class => function(AfterSheet $event)
中,您需要添加以下代码:
$styleHeader = [
'borders' => [
'allBorders' => [
'borderStyle' => 'thin',
'color' => ['rgb' => '808080']
],
]
];
$event->sheet->getStyle("A1:C1")->applyFromArray($styleHeader);
并将“A1:C1”替换为您的标题范围。
对我来说,我通过扩展添加了事件
WithEvents
并使用
use Maatwebsite\Excel\Concerns\WithEvents;
然后我就这样申请....
public function registerEvents(): array
{
$alphabetRange = range('A', 'Z');
$alphabet = $alphabetRange[$this->totalValue+6]; // returns Alphabet
$totalRow = (count($this->attributeSets) * 3) + count($this->allItems)+1;
$cellRange = 'A1:'.$alphabet.$totalRow;
return [
AfterSheet::class => function(AfterSheet $event) use($cellRange) {
$event->sheet->getStyle($cellRange)->applyFromArray([
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '000000'],
],
],
])->getAlignment()->setWrapText(true);
},
];
}
有关详细信息或更多信息,您可以关注该文档https://docs.laravel-excel.com/3.1/getting-started/
@Zahid 回答 v3.1 的一点更新
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
$alphabet = $event->sheet->getHighestDataColumn();
$totalRow = $event->sheet->getHighestDataRow();
$cellRange = 'A7:'.$alphabet.$totalRow;
$event->sheet->getStyle($cellRange)->applyFromArray([
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_HAIR,
],
],
])->getAlignment()->setWrapText(true);
},
];
}
要换行单元格,请传递 $start 和 $end 单元格值
$this->spreadsheet->getActiveSheet()->mergeCells($start.':'.$end);
我认为这个助手可以让您的任务变得简单,并帮助您找到您想要的东西: phpspreadsheet 更简单
有一个方法
// $titleName : pass data that you wants to set (not array)
// $mergeTill : pass count of array dataset (Int)
public function setTitle($titleName, $mergeTill, $startCell ,$styleName = "")
通过给出的示例链接
查看此示例