将样式从一行复制并粘贴到另一行

Cih*_*han 7 php phpexcel

我正在使用PHP Excel使用模板Excel文件创建Excel.问题是我有一个datagrid,我在模板中设置了标题和第一行.这是它的样子:

模板

最左上角的坐标是C49.

如果我有100行,我需要复制第一行的样式并粘贴100次.这是我的代码

$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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我有以下几点:

在此输入图像描述

但我的期望是:

在此输入图像描述

是错误还是我做错了什么?

Tim*_*ner 1

正如马克在评论中指出的那样;合并的单元格是结构性的,而不是样式的。因此复制样式不会自动复制合并的单元格。

有一个功能请求能够复制整个行,包括合并的单元格


处理此问题的一种方法是使用isInMergeRange()如下函数检查单元格是否是合并的一部分:

$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
Run Code Online (Sandbox Code Playgroud)

^这将返回一个布尔值,指示它是否是合并单元格的一部分。


您可能感兴趣的另一个函数是isMergeRangeValueCell()

$cell->isMergeRangeValueCell()
Run Code Online (Sandbox Code Playgroud)

^这会返回一个布尔值,指示它是合并单元格的一部分,并且该单元格包含合并范围的值;在所有其他情况下它都会返回 false。