Pythonのxlwingsライブラリを使ったExcelファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。
※本章はパソコンに Microsoft Excel がインストールされていることが前提です。
1.xlwingsライブラリのインストール
xlwings を使うには、事前にインストール作業が必要です。
手順を追って説明します。
① コマンドプロンプトを管理者として実行
Windows画面の左下にある検索ボックスに、キーボードから cmd と入力します。
右上に コマンドプロンプト が表示されていることを確認して、『管理者として実行』をクリックします。

コマンドプロンプトを管理者として実行
ユーザー アカウント制御 ダイアログボックスが表示されて、「このアプリがデバイスに変更を加えることを許可しますか?」と聞いてくるので、『はい』をクリックします。
管理者:コマンドプロンプト が起動します。
Microsoft Windows [Version 10.0.22631.4317] (c) Microsoft Corporation. All rights reserved. C:\Windows\System32>
② インストールされているライブラリの確認
管理者:コマンドプロンプト でキーボードから pip list と入力して、 Enter キーを押下します。
インストールされているライブラリの一覧が表示されます。
xlwings がインストールされていないことを確認します。
Microsoft Windows [Version 10.0.22631.4317] (c) Microsoft Corporation. All rights reserved. C:\Windows\System32>pip list Package Version --------------- ----------- numpy 2.1.2 pandas 2.2.3 pip 24.2 python-dateutil 2.9.0.post0 pytz 2024.2 pywin32 307 six 1.16.0 tzdata 2024.2 C:\Windows\System32>
③ xlwings のインストール
管理者:コマンドプロンプト でキーボードから pip install xlwings と入力して、 Enter キーを押下します。
最後の行に『 Successfully installed 』と表示されれば、インストール完了です。
C:\Windows\System32>pip install xlwings Collecting xlwings Downloading xlwings-0.33.1-cp312-cp312-win_amd64.whl.metadata (5.5 kB) Requirement already satisfied: pywin32>=224 in c:\python\lib\site-packages (from xlwings) (307) Downloading xlwings-0.33.1-cp312-cp312-win_amd64.whl (1.6 MB) ---------------------------------------- 1.6/1.6 MB 940.0 kB/s eta 0:00:00 Installing collected packages: xlwings Successfully installed xlwings-0.33.1 C:\Windows\System32>
【補足】学校や会社内のパソコンをお使いの方へ
pip install xlwings が失敗する場合があります。
この場合は、インストールする際にプロキシサーバーの情報を渡す必要があります
プロキシサーバーの情報は、システム管理者に確認してください。
・プロキシサーバー名
・ポート番号
プロキシサーバーの情報を取得できましたら、xlwings のインストールは次のようにします。
pip install --proxy="プロキシサーバー名:ポート番号" xlwings
④ xlwings のインストールの確認
管理者:コマンドプロンプト でキーボードから pip list と入力して、 Enter キーを押下します。
インストールされているライブラリの一覧が表示されます。
一覧に xlwings があることを確認します。
C:\Windows\System32>pip list Package Version --------------- ----------- numpy 2.1.2 pandas 2.2.3 pip 24.2 python-dateutil 2.9.0.post0 pytz 2024.2 pywin32 307 six 1.16.0 tzdata 2024.2 xlwings 0.33.1 C:\Windows\System32>
2.演習用プログラムのダウンロード
演習用プログラム( practice15.py )とExcelファイル( excel_file1.xlsm )をダウンロードします。
演習用プログラムは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice15.py、excel_file1.xlsm を Python をインストールしたフォルダ(今回は C:\Python)に置きます。
3.ソースコードの表示とExcelファイルの内容の確認
メモ帳を使って、演習用プログラム( practice15.py )を開きます。

practice15.py
Excelファイル( excel_file1.xlsm )の内容を確認します。
excel_file1.xlsm は マクロ( Macro1 )を含みます。

excel_file1.xlsm
4.Excelファイルの読み込み
最初に xlwingsライブラリ を使って、Excelファイルを読み込む方法を見ていきます。
① Excelファイルを読み込む
まずは、コマンドプロンプト で practice15.py を実行します。
プログラムを実行する方法は、こちらの記事『ファイルに保存されたプログラムの実行』を参照します。
以下のように表示されます。
C:\Users\kotablog>python C:\Python\practice15.py *** Excelファイルの読み込み **** excel_file1.xlsmを開きます A1セルのデータを取得します 商品コード 1行2列目のデータを取得します 商品名 B1セルからC2セルのデータを取得します [['商品名', '金額'], ['みかん', 100.0]] [['商品名', '金額'], ['みかん', 100.0]] A1セルから行方向にデータを取得します ['商品コード', '商品名', '金額'] ['商品コード', '商品名', '金額'] C1セルから列方向にデータを取得します ['金額', 100.0] ['金額', 100.0] A1セルを左上とする表形式のデータを取得します [['商品コード', '商品名', '金額'], ['A0001', 'みかん', 100.0]] [['商品コード', '商品名', '金額'], ['A0001', 'みかん', 100.0]]
プログラムソースを確認します。
01 # -*- coding: utf-8 -*-
02 """
03 演習プログラム15
04
05 xlwingsを使った Excelファイルの読み書き
06
07 """
08 import sys # sysモジュールのインポート
09 import xlwings as xw # Excelファイルアクセス用
10
11 print("\n*** Excelファイルの読み込み ****")
12
13 # Excelファイルを開く
14 print("\nexcel_file1.xlsmを開きます")
15 file_name1 = r"C:\Python\excel_file1.xlsm" # ファイルのフルパス名
16 app_excel = xw.App(visible=True) # Excelの画面を表示する
17 #app_excel = xw.App(visible=False) # Excelの画面を表示しない
18
19 wb = xw.Book(file_name1) # ブックを開く
20 wb.activate() # ブックをアクティブにする
21 ws = xw.sheets["Sheet1"] # Sheet1を選択
22 ws.activate() # シートをアクティブにする
23
Excelファイルを開く
09行目で xlwingsライブラリをインポートしています。このときライブラリ名を xw に設定しています。
15行目で 変数 file_name1 に excel_file1.xlsm のフルパスファイル名をセットしています。
16行目と17行目では、Excelの画面を表示するかしないかを設定しています。
App()メソッドの引数 visible が True の場合は表示する、False の場合は表示しません。
規定値は表示するになります。
19行目で ブックを開き、21行目で "Sheet1" を選択しています。
24 # 単一セルの読み込み(セル番地でアクセス)
25 print("\nA1セルのデータを取得します")
26 print(xw.Range("A1").value)
27
単一セルの読み込み(セル番地でアクセス)
26行目で Range()メソッドの引数に、セル番地(今回は A1セル)を指定することで、そのセルの値を取得しています。
28 # 単一セルの読み込み(行番号、列番号でアクセス)
29 print("\n1行2列目のデータを取得します")
30 print(xw.Range((1, 2)).value)
31
単一セルの読み込み(行番号、列番号でアクセス)
30行目で Range()メソッドの引数に、行番号と列番号(今回は 1行2列目)を指定することで、そのセルの値を取得しています。
32 # セル範囲の読み込み
33 print("\nB1セルからC2セルのデータを取得します")
34 print(xw.Range("B1:C2").value)
35 print(xw.Range((1, 2),(2, 3)).value)
36
セル範囲の読み込み
34行目で Range()メソッドの引数に、セル範囲をセル番号(今回は B1:C2)で指定すると、そのセル範囲の値をリストで取得できます。
B1セルは、行番号が 1 で 列番号が 2、C2セルは、行番号が 2 で 列番号が 3 になります。
35行目で Range()メソッドの引数に、セル範囲を行番号と列番号で指定すると、そのセル範囲の値をリストで取得できます。
37 # 行方向に読み込み
38 print("\nA1セルから行方向にデータを取得します")
39 print(xw.Range("A1").expand('right').value)
40 print(xw.Range((1, 1)).expand('right').value)
41
行方向に読み込み
39行目では expand('right') を指定することで、開始セル(今回は A1セル)から行方向(右方向)のセルの値をリストで取得できます。
40行目は 開始セルを行番号と列番号で指定する方法です。
42 # 列方向に読み込み
43 print("\nC1セルから列方向にデータを取得します")
44 print(xw.Range("C1").expand('down').value)
45 print(xw.Range((1, 3)).expand('down').value)
46
列方向に読み込み
44行目では expand('down') を指定することで、開始セル(今回は C1セル)から列方向(下方向)のセルの値をリストで取得できます。
45行目は 開始セルを行番号と列番号で指定する方法です。
47 # 表形式のデータを読み込み
48 print("\nA1セルを左上とする表形式のデータを取得します")
49 print(xw.Range("A1").expand('table').value)
50 print(xw.Range((1, 1)).expand('table').value)
51
表形式のデータを読み込み
49行目では expand('table') を指定することで、左上セル(今回は A1セル)から表形式のセルの値をリストで取得できます。
50行目は 左上セルを行番号と列番号で指定する方法です。
52 # Excelファイルを閉じる
53 wb.close() # ブックを閉じる
54 app_excel.kill() # オブジェクトを廃棄
55
56 #終了1
57 sys.exit()
Excelファイルを閉じる
53行目の close()メソッドで、ブックを閉じています
54行目の kill()メソッドで、Appオブジェクトを廃棄しています。
5.Excelファイルの書き込み
次に xlwingsライブラリ を使って、Excelファイルに書き込む方法を見ていきます。
① Excelファイルに書き込む
ソースコード #終了1 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** Excelファイルに書き込み **** excel_file1.xlsmを開きます A3セルにデータを書き込みます(A0002) 3行2列目のセルにデータを書き込みます(メロン) A4セルから行方向にデータを書き込みます(A0003, いちご) C3セルから列方向にデータを書き込みます(200, 300) A5セルから表形式のデータを書き込みます(A0004,バナナ, 400、A0005,レモン,500)
エクスプローラから、excel_file2.xlsm を開いて内容を確認してください。
プログラムソースを確認します。
59 print("\n*** Excelファイルに書き込み ****")
60
61 print("\nexcel_file1.xlsmを開きます")
62 app_excel = xw.App(visible=True) # Excelの画面を表示する
63 #app_excel = xw.App(visible=False) # Excelの画面を表示しない
64
65 wb = xw.Book(file_name1) # ブックを開く
66 wb.activate() # ブックをアクティブにする
67 ws = xw.sheets["Sheet1"] # Sheet1を選択
68 ws.activate() # シートをアクティブにする
69
70 # 単一セルに書き込み(セル番地でアクセス)
71 print("\nA3セルにデータを書き込みます(A0002)")
72 xw.Range("A3").value = "A0002"
73
単一セルに書き込み(セル番地でアクセス)
71行目で Range()メソッドの引数に、セル番地(今回は A3セル)を指定して、そのセルに "A0002" をセットしています。
74 # 単一セルの書き込み(行番号、列番号でアクセス)
75 print("\n3行2列目のセルにデータを書き込みます(メロン)")
76 xw.Range((3, 2)).value = "メロン"
77
単一セルの書き込み(行番号、列番号でアクセス)
76行目で Range()メソッドの引数に、行番号と列番号(今回は 3行2列目)を指定して、そのセルに "メロン" をセットしています。
78 # 行方向に書き込み
79 print("\nA4セルから行方向にデータを書き込みます(A0003, いちご)")
80 xw.Range("A4").value = ["A0003", "いちご"]
81 xw.Range((4, 1)).value = ["A0003", "いちご"]
82
行方向に書き込み
80行目で Range()メソッドの引数に、セル番地(今回は A4セル)を指定して、リストを設定すると行方向のセルに値がセットされます。
81行目は Range()メソッドの引数に、セルを行番号と列番号で指定する方法です。
83 # 列方向に書き込み
84 print("\nC3セルから列方向にデータを書き込みます(200, 300)")
85 xw.Range("C3", transpose=True).value = [200, 300]
86 xw.Range((3, 3), transpose=True).value = [200, 300]
87
列方向に書き込み
85行目で Range()メソッドの第二引数に、transpose=True を指定すると、列方向のセルに値がセットされます。
86行目は Range()メソッドの引数に、セルを行番号と列番号で指定する方法です。
88 # 表形式で書き込み
89 print("\nA5セルから表形式のデータを書き込みます(A0004,バナナ, 400、A0005,レモン,500)")
90 xw.Range("A5").value = [["A0004", "バナナ", 400],["A0005", "レモン", 500]]
91 xw.Range((5, 1)).value = [["A0004", "バナナ", 400],["A0005", "レモン", 500]]
92
93 file_name2 = r"C:\Python\excel_file2.xlsm" # ファイルのフルパス名
94 wb.save(file_name2) # ブックの保存
95 wb.close() # ブックを閉じる
96 app_excel.kill() # オブジェクトを廃棄
97
98 #終了2
99 sys.exit()
表形式で書き込み
90行目で Range()メソッドの引数に、セル番地(今回は A5セル)を指定して、2次元リストを設定すると、セル番地を左上にして表形式に値がセットされます。
91行目は Range()メソッドの引数に、セルを行番号と列番号で指定する方法です。
6.Excelマクロの実行
① Excelマクロの実行
excel_file2.xlsm には以下のマクロが含まれます。
Sub Macro1()
'
' Macro1 Macro
' 金額欄を合計するマクロ
'
' Keyboard Shortcut: Ctrl+m
'
Dim rng As Range
Set rng = Range("C2:C6")
Range("C7") = WorksheetFunction.Sum(rng)
Set rng = Nothing
End Sub
このマクロをPythonから実行します。
ソースコード #終了5 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** Excelマクロの実行 **** excel_file2.xlsmを開きます マクロ Macro1 を実行します ブックを保存して閉じます
エクスプローラから、excel_file2.xlsm を開いて内容を確認してください。
プログラムソースを確認します。
101 print("\n*** Excelマクロの実行 ****")
102
103 print("\nexcel_file2.xlsmを開きます")
104 app_excel = xw.App(visible=True) # Excelの画面を表示する
105emsp;#app_excel = xw.App(visible=False) # Excelの画面を表示しない
106
107 wb = xw.Book(file_name2) # ブックを開く
108 wb.activate() # ブックをアクティブにする
109 ws = xw.sheets["Sheet1"] # Sheet1を選択
110 ws.activate() # シートをアクティブにする
111
112 print("\nマクロ Macro1 を実行します")
113 macro = wb.macro('Macro1') # マクロを取得
114 macro() # マクロを実行
115
116 print("\nブックを保存して閉じます")
117 wb.save() # ブックの保存
118 wb.close() # ブックを閉じる
119 app_excel.kill() # オブジェクトを廃棄
120
121 #終了3
122 sys.exit()
113行目で 実行したいマクロ名を設定しています。
114行目で マクロを実行しています。
7.セルの装飾
本章では、セルの装飾として
・セル背景色の設定
・セルの表示形式の設定(カンマ編集)
を行います。
① セルの装飾
ソースコード #終了3 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** セルの装飾 **** excel_file2.xlsmを開きます A1:C1のセル背景色を水色にします C2からC7のセルの表示形式をカンマ編集にします ブックを保存して閉じます
エクスプローラから、excel_file2.xlsm を開いて内容を確認してください。
プログラムソースを確認します。
124 print("\n*** セルの装飾 ****")
125
126 print("\nexcel_file2.xlsmを開きます")
127 app_excel = xw.App(visible=True) # Excelの画面を表示する
128 #app_excel = xw.App(visible=False) # Excelの画面を表示しない
129
130 wb = xw.Book(file_name2) # ブックを開く
131 wb.activate() # ブックをアクティブにする
132 ws = xw.sheets["Sheet1"] # Sheet1を選択
133 ws.activate() # シートをアクティブにする
134
135 # セル背景色の設定
136 print("\nA1:C1のセル背景色を水色にします")
137 xw.Range("A1:C1").color = 204, 255, 255
138
セル背景色の設定
137行目の Range(セルもしくはセル範囲).color に カラーコードをセットすることでセル背景色を設定しています。
139 # セルの表示形式の設定
140 print("\nC2からC7のセルの表示形式をカンマ編集にします")
141 xw.Range("C2:C7").number_format = '#,##0'
142
143 print("\nブックを保存して閉じます")
144 wb.save() # ブックの保存
145 wb.close() # ブックを閉じる
146 app_excel.kill() # オブジェクトを廃棄
147
148 sys.exit()
セルの表示形式の設定
141行目の Range(セルもしくはセル範囲).number_format に表示形式を表す文字列をセットしています。
<CSVファイルの読み書き | xlwingsを使った Excelファイルの読み書き | openpyxlを使った Excelファイルの読み書き> |