xlwingsでExcelファイルを操作する方法【使いやすい】

xlwingsの使い方です。シート操作やセルの操作の内、使用頻度が高そうなものに絞って一覧にしました。必ず使うものに、過去にクライアントからの要求があったものです。

また、xlwings使っていて、気付いた事が何点かあったので、付記しています。

xlwingsでExcelファイルを操作する方法

操作するサンプルです。公式にも載っていなかったものもあります。

xlwingsでBookを操作

ここのサンプルは、マクロ付きのbookを操作していますが、ないものも使えます。

ExcelVBA(マクロ)を実行

海外の掲示板でBookのマクロの実行方法を試行錯誤していたので、載せておきます。

マクロは、Excelの標準モジュールに記述しています。

xlwingsでExcelファイルを操作する方法

import xlwings as xw

#   エクセルの非表示を設定
xw.App(visible=False)

#   既存のBOOKを開く
wb = xw.Book('.\\xlwings.xlsm')

sh = wb.sheets[0]
sh.activate()
wb.macro('user_macro')()

BookをPDF出力

bookのインスタンスから、各シートを1つのPDFにまとめて出力できます。

シートに何も書かれていないとき、PDFを閲覧できないファイルができました。

xw.App(visible=False)
wb = xw.Book('.\\xlwings.xlsm')

#   BOOKをPDF出力
wb.to_pdf('xlwings.pdf', include=[1, 3])    # 1番目と3番目のシートを出力

xlwingsでSheetを操作

BookやSheetのインスタンス経由で弄ったのですが、リファレンスの通りに動かないものもありました。

シート名の取得・設定・一覧

import xlwings as xw

xw.App(visible=False)
wb = xw.Book('.\\xlwings.xlsm')
sh = wb.sheets[0]
sh.activate()

sh.name = "Sheet1 EX"

#   シート名一覧の取得
for sh in wb.sheets:
    print(sh.name)

シートの追加

#   シートの追加
wb.sheets.add(name='新規シート名', after='Sheet2')    # Sheet2の後に新規に追加
wb.sheets.add(name='新規シート名 2回目', before='Sheet3')   # Sheet3の前に新規に追加

シートのコピー

下のサンプルは、シート”Sheet1″をコピーしています。

#   シートのコピー
wb.sheets['Sheet1'].copy(name='copyシート')   # after不可
wb.sheets['Sheet1'].copy(name='copyシート 2回目')   # before不可

シートの追加は、指定したシートの後又は前に追加できたのですが、copy()は引数に指定できても、実行時に例外が出力されました。

シートをクリアして、何もない状態に

下のサンプルは、シート”Sheet1″をまっさらな状態にしています。新規にシートを作成したのと同じ状態になります。

#   シートのすべての値と書式をクリア
wb.sheets['Sheet1'].clear()

シートの書式設定を残して、クリア

シートのExcelの書式設定で設定できる項目以外は全てクリアされます。オートフィルターも計算式も無くなります。

wb.sheets['Sheet1'].clear_contents()

sheetをPDFに出力

bookにsheet出力がありましたが、シートにもあります。

wb.sheets['Sheet1'].to_pdf('xlwings_sheet.pdf')

シートを削除

wb.sheets['Sheet1'].delete()

シートの非表示の取得・設定

wb.sheets['Sheet1'].visible = False	# シートが非表示になる

xlwingsでセルを操作

定番のセルの値を取得・設定は公式で見つけられますが、WEB検索しても見つけ辛かったものも探して載せました。

セルの値を取得・設定

import xlwings as xw

xw.App(visible=False)
wb = xw.Book('.\\xlwings.xlsm')
sh = wb.sheets[0]
sh.activate()

#   セルの値 取得・設定
sh.range('A1').value = 1
sh.range('A2:B2').value = [2, 7, 1, 8, 2]
sh.range(sh.range('A3'), sh.range('B3')).value = [1, 2]
sh.range(sh.cells(4, 1)).value = 1.1414
sh.range((5, 1)).value = 1.732
sh.range((6, 1), (6, 2)).value = [3, 14]

行の高さを 取得・設定

プライオリティrow_heightで高さを設定できます。row_heightとは別に、高さの読み取り専用のプライオリティもあります。

sh.range('A3').value = 3.1415
sh.range('A3').row_height = 50  # 高さ

セルの挿入

下のサンプルは、A18より下のセルを下方にシフトさせています。

sh.range('a18').insert(shift='down')        # 下にシフト / 右シフトは、shift="right"

行の挿入

セルの挿入用の関数で行を指定して、行挿入しています。

sh.range('18:18').insert(shift='down')  	# 下にシフト / 右シフトは、shift="right"

行の削除

sh.range('18:18').delete()

セルの結合と解除

Excelファイルからデータ集計する場合、結合はなるべくなら避けたいですが、結合の需要ありました。

sh.range('A18:E31').merge()
if sh.range('A18:E31').merge_cells:
    sh.range('A18:E31').unmerge()

ハイパーリンクの設定と解除

sh.range('a18').add_hyperlink('https://posipochi.com', 'xlwings')
sh.range('a18').clear()         # 値もクリア!

参考サイト

xlwings公式を一通り見たら、順調に実装できました。

コメント

タイトルとURLをコピーしました