7

PHP Excelを使用して、テンプレート Excel ファイルを使用して Excel を作成しています。問題は、データグリッドがあり、テンプレートのヘッダーと最初の行のスタイルを設定したことです。これがどのように見えるか:

テンプレート

左上端の座標は 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;
    }
}

ただし、次のことがありました。

ここに画像の説明を入力

しかし、私が期待したのは:

ここに画像の説明を入力

それはバグですか、それとも何か間違っていますか?

4

1 に答える 1

1

マークがコメントで指摘したように。結合されたセルはスタイルではなく構造的です。したがって、スタイルをコピーしても、結合されたセルは自動的にコピーされません。

結合されたセルを含む行全体を複製できる機能のリクエストがあります


これに対処する 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

^結合されたセルの一部であるかどうかを示すブール値を返します。


あなたが興味を持つかもしれない別の関数はisMergeRangeValueCell()関数です:

$cell->isMergeRangeValueCell()

^これは、セルが結合セルの一部であり、セルに結合範囲の値が含まれていることを示すブール値を返します。他のすべての状況では false を返します。

于 2016-03-23T18:01:07.027 に答える