openpyxlを使ってpythonでエクセルを操作する処理を書いていたのですが、マージされたセルのコピーがシンプルにいかなかったので、その方法を覚え書きしておきます。
#ブックを開く。
newBook = px.load_workbook("オリジナル.xlsx");
#シートを開く。
newSheet = newBook.get_sheet_by_name("Sheet1");
#シフトする行数。
shiftRow = 9;
#マージされている全セルの範囲情報を使って、ループを回す。
for merged_cell in newSheet.merged_cells.ranges:
if merged_cell.min_row >= 32 :
#一旦マージを解除する。これが肝。
newSheet.unmerge_cells(merged_cell.coord);
#コピー先のセルの結合範囲情報を作成する。
newCellRange = copy.copy(merged_cell);
#コピー先のセルの結合範囲情報をずらす。ここでは9行(shiftRow)分ずらしている。
newCellRange.shift(0, shiftRow);
fmt = "{min_col}{min_row}"
#コピー元のコードを作成。
copySrcCoord = fmt.format(
min_col = get_column_letter(merged_cell.min_col),
min_row = merged_cell.min_row );
#コピー先のコードを作成。
copyDstCoord = fmt.format(
min_col = get_column_letter(newCellRange.min_col),
min_row = newCellRange.min_row );
#セルの値をコピー。
newSheet[copyDstCoord].value = newSheet[copySrcCoord].value;
#書式があるならそれもコピー。
if newSheet[copySrcCoord].has_style :
newSheet[copyDstCoord]._style = newSheet[copySrcCoord]._style;
#マージして完成!
newSheet.merge_cells(merged_cell.coord);
newSheet.merge_cells(newCellRange.coord);
肝はいったんマージを解除しないとコピーできないということです。
もっと簡単な方法があったら誰か教えてください。