Pythonでxlwingsを用いてExcelシートから単体のセルを指定し値を出力してみます。
今回はxlwingsを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■Excelを用意する
今回、xlwingsを用いてExcelシートから単体のセルを指定し値を出力してみますが、その前にExcelを用意します。
今回は上記のGoogleスプレッドシートで作成したシートをMicrosoft Excel(.xlsx)形式に変換してローカル上にダウンロードしました。ダウンロード後、ファイル名を「test01.xlsx」という名前に変更し、分かりやすいように「C:\Users\user_\test(フォルダパス)」内に移動させます。これでExcelの用意は完了となります。
■xlwingsを用いてExcelシートから単体のセルを指定し値を出力する
Excelの用意ができた後に、xlwingsを用いてExcelシートから単体のセルを指定し値を出力するスクリプトを書いていきます。
■コード
import xlwings as xw ws = xw.Book(r"C:\Users\user_\test\test01.xlsx").sheets['シート'] value_1 = ws.range("B2").value value_2 = ws.range("B3").value print(value_1,value_2)
今回はimportでxlwingsモジュールを呼び出し、モジュールを「ws」as(として)用います。その後、wsという変数を定義し、その中でxw.Book()を用います。これで新しいworkbookが作成できます。作成後、括弧内に引数,パラメータとして、今回用意したExcelの名前と置かれている場所を渡します。また、今回はシートから単体のセルを指定するので、ドッド(.)演算子でsheetsを指定します。
指定後、value_1とvalue_2という変数を定義し、その中でws変数に対してrange()を用いて範囲を指定します。さらにドッド(.)演算子を用いてvalue(値)を読み取ります。これで読み取った値をvalue_1とvalue_2という変数にそれぞれ格納されます。
格納後、print()を用いて格納された値を出力します。
■実行・検証
このスクリプトを「x_excel_auto.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
Traceback (most recent call last): File "x_excel_auto.py", line 3, in ws = xw.Book(r"C:\Users\user_\test\test01.xlsx").sheets['シート1'] File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\xlwings\main.py", line 834, in __init__ app = App(add_book=False) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\xlwings\main.py", line 279, in __init__ self.impl = engines.active.apps.add( File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\xlwings\main.py", line 188, in add return App(impl=self.impl.add(**kwargs)) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\xlwings\_xlwindows.py", line 505, in add return App(spec=spec, add_book=add_book, xl=xl, visible=visible) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\xlwings\_xlwindows.py", line 529, in __init__ self._xl = COMRetryObjectWrapper(DispatchEx("Excel.Application")) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\win32com\client\__init__.py", line 145, in DispatchEx dispatch = pythoncom.CoCreateInstanceEx( pywintypes.com_error: (-2147221005, 'クラス文字列が無効です', None, None)
実行してみるというエラーが出力されました。エラー内容を確認し調べてみると、このWindowsにExcelがインストールされていないために発生するエラーということだった。そのため、Excelを新しくインストールし検証を行うことも考えたが、少し古めのMacOSにExcelをインストールしてあることを思い出し、MacOSの方で検証を行うことにした。
■MacOSの環境
■MacOSでのスクリプトの実行・検証
MacOSを起動し、「ターミナル」を起動する。起動後、Pythonのバージョンを確認する。確認すると今回はPythonのバージョン3.8.5がインストールされていた。インストールの確認後、pipを経由し、xlwingsをインストールする。
インストール後、スクリプトファイルとExcelファイルをPythonが実行されている作業ディレクトリ(カレントディレクトリ)に置くために、「pwd」コマンドで作業ディレクトリ(カレントディレクトリ)を確認する。
確認後、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に、スクリプトファイルと、Excelファイルを置く。
■コード
import xlwings as xw ws = xw.Book("test01.xlsx").sheets['シート'] value_1 = ws.range("B2").value value_2 = ws.range("B3").value print(value_1,value_2)
なお、スクリプトファイルは、上記のように変更し、変更後保存する。
保存後、「ターミナル」からスクリプトファイルを実行する。実行するとExcelが起動し、「ファイル”****.xlsx”を選択してください:」というウインドウが表示される。ウインドウ内の「アクセス権限を付与」ボタンをクリックする。クリックすると、今回用意したExcelファイルが開く。
開いた後に「ターミナル」を確認すると、Excelシートから単体のセルを指定し値を出力させることができた。
コメント