LoginSignup
5
5

More than 5 years have passed since last update.

【python】openpyxlを使ったマージしたセルのコピー

Posted at

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);

肝はいったんマージを解除しないとコピーできないということです。
もっと簡単な方法があったら誰か教えてください。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5