xlwingsの使い方です。シート操作やセルの操作の内、使用頻度が高そうなものに絞って一覧にしました。必ず使うものに、過去にクライアントからの要求があったものです。
また、xlwings使っていて、気付いた事が何点かあったので、付記しています。
xlwingsでExcelファイルを操作する方法
操作するサンプルです。公式にも載っていなかったものもあります。
xlwingsでBookを操作
ここのサンプルは、マクロ付きのbookを操作していますが、ないものも使えます。
ExcelVBA(マクロ)を実行
海外の掲示板でBookのマクロの実行方法を試行錯誤していたので、載せておきます。
マクロは、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公式を一通り見たら、順調に実装できました。
コメント