Php 将样式从一行复制并粘贴到另一行
我正在使用模板Excel文件创建Excel。问题是我有一个datagrid,我在模板中设置了标题和第一行的样式。下面是它的样子: 最左上方的坐标是C49 若我有100行,我需要复制第一行的样式并粘贴100次。 这是我的密码Php 将样式从一行复制并粘贴到另一行,php,phpexcel,Php,Phpexcel,我正在使用模板Excel文件创建Excel。问题是我有一个datagrid,我在模板中设置了标题和第一行的样式。下面是它的样子: 最左上方的坐标是C49 若我有100行,我需要复制第一行的样式并粘贴100次。 这是我的密码 $cstart = 2; $rstart = 49; $count = 1; $input = $worksheet->getStyle(num2char($cstart) . $rstart); foreach ($b_data['rawData'] as $va
$cstart = 2;
$rstart = 49;
$count = 1;
$input = $worksheet->getStyle(num2char($cstart) . $rstart);
foreach ($b_data['rawData'] as $value) {
$worksheet->setCellValueByColumnAndRow($cstart, $rstart, $count++)
->setCellValueByColumnAndRow($cstart + 1, $rstart, $value['key'])
->setCellValueByColumnAndRow($cstart + 5, $rstart, $value['value']);
$interval = num2char($cstart) . $rstart . ':' . num2char($cstart+5) . $rstart;
$worksheet->duplicateStyle($input, $interval);
$rstart++;
}
function num2char($num) {
$numeric = $num % 26;
$letter = chr(65 + $numeric);
$num2 = intval($num / 26);
if ($num2 > 0) {
return num2char($num2 - 1) . $letter;
} else {
return $letter;
}
}
然而,我有以下几点:
但我所期望的是:
是bug还是我做错了什么?正如马克在评论中指出的那样;合并单元格是结构化的,而不是样式。因此,复制样式不会自动复制合并的单元格 有一种方法可以复制整行,包括合并的单元格
处理此问题的一种方法是使用以下函数检查单元格是否是合并的一部分:
$workbook = new PHPExcel; // prepare the workbook
$sheet = $workbook->getActiveSheet(); // get the sheet
$sheet->mergeCells('A1:E1'); // merge some cells for tesing
$cell = $sheet->getCell('A1'); // get a cell to check if it is merged
$cell->isInMergeRange() // check if cell is merged
^这将返回一个布尔值,指示它是否是合并单元格的一部分
您可能感兴趣的另一个函数是
isMergeRangeValueCell()
函数:
$cell->isMergeRangeValueCell()
^这将返回一个布尔值,指示它是合并单元格的一部分,该单元格包含合并范围的值;在所有其他情况下,它都返回false。可能重复检查此处给出的解决方案,它应该会有所帮助。但我实际上不理解代码中的两件事:第一,为什么要对每一行应用
duplicateStyle
(例如,可以对整个范围应用,'C49:E59');第二,它不应该是num2char($cstart+5)
。1-起初,我尝试应用整个范围,但也不起作用。所以我一排一排地试着。对不起,我更改了很多代码。现在编辑。谢谢。逐行方法不起作用,原因相同:duplicateStyle
在使用样式管理器时存在缺陷。合并的单元格是结构化的,而不是样式,因此复制样式不会自动合并单元格,就像在MS Excel中一样