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などのような予測不可能な動的値があります(通常のパターンはありません)。
Noteセルのすぐ下にあるように、前の snap shot に示すようにセルをマージします。これらのセルを行で結合した後、次のように列で結合しようとしています。
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
しかし、それは機能しません。 Excelファイルを開こうとすると、確認を求められます(確認ボックス付き)
Excelは、「report.xlsx」で読み取り不可能なコンテンツを検出しました。このワークブックの内容を回復しますか?このブックのソースを信頼する場合は、[はい]をクリックします。
Excelで行と列でセルを結合する方法は?
マージには、A1:B2のような有効なセル範囲が必要です。
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
問題なく動作するはずです。
簡単なテストケースを試してみて、これが問題を引き起こしていることを証明してください。スクリプト内の何かではありません。
[〜#〜] edit [〜#〜]
質問を読み直した後:問題は、各行をマージしてから列ごとにマージするのではなく、すでにマージ範囲の一部であるセルをマージしようとしている可能性があります。
$sheet->mergeCells("G".($row_count+1).":I".($row_count+4));
セルのマージにはもう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)
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))
セルを計算して、列と行でマージする簡単な関数を作成します。
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 Baker
この質問の解決策も探していました。どこでセルをマージし、その上にコンテンツ(値)を配置したいのですか?いくつかの検索の後、私はこれについていくつかの解決策を得ました。しかし、私は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),
)
));