web-dev-qa-db-ja.com

PHPExcelを使用して行と列でExcelのセルを結合する

PHPExcel を使用して、Excel(xlsx)内のセルを行ごと、列ごとに結合する必要があります。私は次を試しました。

$sheet->mergeCells("G".($row_count+1).":G".($row_count+4));             
$sheet->mergeCells("H".($row_count+1).":H".($row_count+4));             
$sheet->mergeCells("I".($row_count+1).":I".($row_count+4));     

変数$row_countには、25、50、75などのような予測不可能な動的値があります(通常のパターンはありません)。

enter image description here

Noteセルのすぐ下にあるように、前の snap shot に示すようにセルをマージします。これらのセルを行で結合した後、次のように列で結合しようとしています。

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));             

しかし、それは機能しません。 Excelファイルを開こうとすると、確認を求められます(確認ボックス付き)

Excelは、「report.xlsx」で読み取り不可能なコンテンツを検出しました。このワークブックの内容を回復しますか?このブックのソースを信頼する場合は、[はい]をクリックします。

Excelで行と列でセルを結合する方法は?

16
Tiny

マージには、A1:B2のような有効なセル範囲が必要です。

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));

問題なく動作するはずです。

簡単なテストケースを試してみて、これが問題を引き起こしていることを証明してください。スクリプト内の何かではありません。

[〜#〜] edit [〜#〜]

質問を読み直した後:問題は、各行をマージしてから列ごとにマージするのではなく、すでにマージ範囲の一部であるセルをマージしようとしている可能性があります。

$sheet->mergeCells("G".($row_count+1).":I".($row_count+4));              
23
Mark Baker

セルのマージにはもう1つの方法があります

    /**
 * Set merge on a cell range by using numeric cell coordinates
 *
 * @param   int $pColumn1   Numeric column coordinate of the first cell
 * @param   int $pRow1      Numeric row coordinate of the first cell
 * @param   int $pColumn2   Numeric column coordinate of the last cell
 * @param   int $pRow2      Numeric row coordinate of the last cell
 * @throws  Exception
 * @return PHPExcel_Worksheet
 */
     public function mergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1)
8
Darkhan ZD
function cellsToMergeByColsRow($start = -1, $end = -1, $row = -1){
    $merge = 'A1:A1';
    if($start>=0 && $end>=0 && $row>=0){
        $start = PHPExcel_Cell::stringFromColumnIndex($start);
        $end = PHPExcel_Cell::stringFromColumnIndex($end);
        $merge = "$start{$row}:$end{$row}";
    }
    return $merge;
}

ケースへの追加:

$objPHPExcel->getActiveSheet()->mergeCells(cellsToMergeByColsRow(0,2,3))
3
Alexej

セルを計算して、列と行でマージする簡単な関数を作成します。

function cellsToMergeByColsRow($start = NULL, $end = NULL, $row = NULL){
    $merge = 'A1:A1';
    if($start && $end && $row){
        $start = PHPExcel_Cell::stringFromColumnIndex($start);
        $end = PHPExcel_Cell::stringFromColumnIndex($end);
        $merge = "$start{$row}:$end{$row}";

    }

    return $merge;
}

そして電話する

$sheet->mergeCells(cellsToMergeByColsRow($col, $col+5, $row));

ありがとう@Mark Ba​​ker

3
jashk

この質問の解決策も探していました。どこでセルをマージし、その上にコンテンツ(値)を配置したいのですか?いくつかの検索の後、私はこれについていくつかの解決策を得ました。しかし、私はgetExcelファイルにMaatawebsiteを使用しているため、チェックしませんでした。

しかし、誰でも試してみることができます..解決策はPHPExcelに基づいています、確かに、それはMaatawebsite

ソースリンク

列Aの行1から列Eの行1にマージ

$objPHPExcel->getActiveSheet()->mergeCells('A1:E1');

// add some text
$objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.'); 

列Aの行1から列Eの行3にマージ

$objPHPExcel->getActiveSheet()->mergeCells('A1:E3');

// add some text
$objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.');

Maatawebsiteドキュメントをチェックしましたが、同じメソッドmergeCellsがあります。だから私は仕事になると思う。

Maatawebsteのこのソリューション。

$sheet->cells('A1:C1', function($cells) {
    $cells->setBorder('thin', 'thin', 'thin', 'thin');
});
$sheet->mergeCells('A1:C1');

解決策2

$sheet->setMergeColumn(array(
'columns' => array('A','B','C','D'),
'rows' => array(
array(2,3),
array(5,11),
)
));
1
pankaj