我想制作像 这样的 phpspreadsheet 我试过下面的代码
foreach( range('A','C') as $ro) {
$r= $ro . "4";
$sheet->setCellValue($r,'Sn');
$sheet->setCellValue($r,'Name');
$sheet->setCellValue($r,'Title');
}
那么,如何获得我想要的 Excel 表格
答案 0 :(得分:1)
是否有理由不使用循环?
$sheet->setCellValue('A4','Sn');
$sheet->setCellValue('B4','Name');
$sheet->setCellValue('C4','Title');
问题在于,对于 foreach 循环中的每次迭代,您都在替换同一单元格的值。
在第一次迭代中,我们将有 $r = 'A4'
。然后将 A4 设置为“Sn”。之后,您将 A4 设置为“名称”,然后将 A4 设置为“标题”。到那时,您已经为这次迭代替换了同一个单元格的内容 3 次。
所以最好跳过循环。
如果您坚持循环,您可以引入将特定列映射到特定值的逻辑,但除非您涉及其他特定逻辑,否则解决方案确实过于复杂
如果你想因为很多列名而循环,我建议你循环一个列数组。如果您使用普通数组,它将是零索引的,这意味着您可以使用 chr()
函数通过将 65 添加到索引来将其映射到适当的字符。请注意,这仅适用于 26 列或更少。
$columns = ['Sn', 'Name', 'Title'];
foreach ($columns as $index => $column) {
$cell = chr($index + 65) . "4";
$sheet->setCellValue($cell, $column);
}
您也可以使用关联数组并将列作为数组的键 - 这适用于任意数量的列(但您仍然必须定义映射)
$columns = [
'A' => 'Sn',
'B' => 'Name',
'C' => 'Title'
];
foreach ($columns as $index => $column) {
$sheet->setCellValue($index."4", $column);
}