xlwingsを使った Excelファイルの読み書き – 【Pythonプログラミング2 ~応用編~】

PROGRAMMING

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

practice15.py


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

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ファイルの読み書き>
タイトルとURLをコピーしました