PythonのopenpyxlでExcel操作でセルを自由に扱う方法を紹介していきます。結合や削除ができると作る表のバリエーションも広がりますね。
これから紹介するコードは以下のコードの続きになると考えてください。シートまで開いた状態からのスタートになります。
1 2 3 4 5 6 7 8 |
>>> import openpyxl >>> path = r"C:\Documents\sample.xlsx" >>> wb = openpyxl.load_workbook(path) >>> sheet = wb['シート1'] #この続きのコードを紹介します。 #最後は必ず保存します。 >>> wb.save(path) |
また、どのセルを変更しているのかは以下のExcelシートを参考にしていください。
Excelファイルの読み込みからシートの取得までの方法は以下の記事にまとめています。
PythonでExcel操作をするときには必ずファイル(ワークブック)の読み込みからシートの指定をする必要があります。 今回はそんな基本的な部分のコードの書き方を3ステップで紹介していきます。 1:openpyxlモジュールの[…]
セルを指定する2つの方法は以下の記事にまとめています。この記事では行列名を指定する方法のみ解説します。
Pythonを使ってExcel操作をするうえでセルの値を自由に変更できないと意味がないですよね。 文字列や数値の書き込みだけでなく数式の書き込みもできるようになりましょう。 今回はセルの基本的な扱い方を紹介していきます。 […]
- Excelファイルを取得するとWorkbookオブジェクトが作られます
- シートを取得するとWorksheetオブジェクトが作られます
- セルを取得するとCellオブジェクトが作られます
- 保存してからファイルを開かないと変更が反映されません
セルの値を取得・削除・コピー
値の取得
value属性を使う
1 2 3 4 5 6 7 8 9 10 |
>>> sheet['A1'].value 'バイト代' >>> sheet['B1'].value 'コンビニ' >>> sheet['C1'].value '居酒屋' >>> sheet['D1'].value '合計' >>> sheet['B2'].value 40000 |
セルに入力されている値を取得してくれます。
値の削除
- value属性に「None」を代入
- value属性がなくてもOK
1 2 3 4 5 6 |
>>> sheet['B4'].value = None >>> sheet['C4'].value = None #value属性が無くてもOK >>> sheet['B4'] = None >>> sheet['C4'] = None |
B4とC4のセルの値が消去されています。
値のコピー
コピー元のvalue属性値をコピー先のセルのvalue属性値に代入
1 |
>>> sheet['E1'].value = sheet['A1'].value |
A1の「バイト代」をE1に代入しています。
セルの値を移動
セルの値をコピー&削除する
1 2 |
>>> sheet['E1'].value = sheet['A1'].value >>> sheet['A1'].value = None |
先ほどのコピーと削除を組み合わせると移動できます。
セルの結合・解除
結合する
merge_cells
メソッドを使う。- 引数は結合したいセルの範囲をコロンでつなげる。
- コロンも含めてすべて文字列で渡す。
- 行列番号を指定する方法もある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#矩形領域を結合 >>> sheet.merge_cells('E1:H4') #行列番号を渡す方法(上と同じところを結合) >>> sheetmerge_cells(start_row=1, start_column=5, end_row=4, end_column=8) #一行を結合 >>> sheet.merge_cells('A6:D6') #行列番号を渡す方法(上と同じところを結合) >>> sheetmerge_cells(start_row=6, start_column=1, end_row=6, end_column=4) |
矩形領域(四角形の領域)を結合するときはその領域の左上と右下の行列名をコロン(:)でつなげて書きます。
一行または一列を結合するときも同様にコロン(:)でつなげて書きます。
結合したセルに書き込む場合は、領域内でもっとも行列名が若いセルを指定します。矩形領域なら左上、一列なら一番上、一行なら左端です。
1 2 3 4 5 6 7 8 9 10 |
#矩形領域への書きこみ >>> sheet['E1'].value = 'セルの結合' #行列名の指定を間違えるとエラー >>> sheet['F2'].value = 'セルの結合' AttributeError: 'MergedCell' object attribute 'value' is read-only #一行の結合セルへの書き込み >>> sheet['A6'].value = 'セルの結合' >>> wb.save(path) |
Attributeerror: 'Mmergedcell' object attribute 'value' is read-only
とは- 結合されたセルの左上以外のセルに書き込もうとした場合に出るエラーです。「
read-only
」となっているので読み込み専用です。
書き込むときは結合しているセルのなかで最も行列名が若いセルを指定します。
結合解除
- unmerge_cellsメソッドを使う
- 引数は結合したいセルの範囲をコロンでつなげる
- コロンも含めてすべて文字列で渡す
1 2 3 4 5 6 7 8 |
>>> sheet.unmerge_cells('E1:H4') >>> sheet.unmerge_cells('A6:D6') #行列番号で指定する方法もあり >>> sheetmerge_cells(start_row=1, start_column=5, end_row=4, end_column=8) >>> sheetmerge_cells(start_row=6, start_column=1, end_row=6, end_column=4) |
まとめ
- セルの値を取得:value属性
- セルの値を削除:value属性に「None」を代入
- セルの結合:merge_cells関数
- 結合解除:unmerge_cells関数
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]