PyLadies勉強会（OpenPyXLライブラリ研究） 参加レビュー ～ 4月29日＠飯田橋

今回、初めて<b>PyLadies Tokyo</b> のオフライン勉強会（4月29日 13:00～17:00 @ 飯田橋）に参加してきました。

■ <a href="https://tokyo.pyladies.com/" target="_blank">PyLadies Tokyoとは？</a><a href="https://tokyo.pyladies.com/" target="_blank">
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/61aef093-6615-01b6-e3c3-da1d88647e98.png)</a>
当日は
  <b>PyLadiesの概要説明 ⇒ 課題着手 ⇒ 発表</b>という流れで

Staffの方にサポートして頂きながら、実際にPythonライブラリについて調べていき、各人それぞれ簡単にGoogleSlideにまとめて発表をしました。



以下、OpenPyXLライブラリについて調べた内容について記載していきます

<h3>はじめに</h3>


ツールを導入・運用する為、VBAのような他のプログラミング言語を使って開発したことがあるいう方もいらっしゃると思います。

<b>使用用途に合わせて、設計をしたツールを作成していく場合、Pythonを利用したほうが、データ処理・分析・解析する際にコードを書きやすい、またはメンテナンスをしやすいというケースもあるでしょう。</b>

今回、Excelの読み書きをPythonで行う為のモジュールである<b>OpenPyXLライブラリ</b>とPySimpleGUIライブラリを使い、

以下のような<b>Excelファイルを読み込んで、処理内容を表示する例</b>を実装しました。(少し予習しました)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/5326e54e-dd82-c856-681c-cda8ea1852a1.png)

画面レイアウトは「<b>PySimpleGUI</b>」ライブラリを使って作成しました。

<h3>PySimpleGUIとは</h3>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/f51b93a5-bc5b-bf01-3f85-b32cc1a106ee.png)


:::note info
【参考サイト】：PySimpleGUIの使い方についての基礎解説
http://www.k-techlabo.org/blog2/?page_id=1481
:::
</p>


まず、PySimpleGUIライブラリを使ってGUIツールの画面レイアウトを作成してみます。

<h4>・PySimpleGUIのインストール</h4>

<b>pipというPythonのパッケージ管理ツール</b>を使って、「PySimpleGUI」をインストールします。
```インストール方法
pip install PySimpleGUI
```
※	Pythonインストール時に標準で入っているパッケージ以外をインストールする場合、
<b>「pip install パッケージ名」</b>のコマンドで、ローカル環境のPowerShellにてインストールをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/07679fb5-c06b-e0a9-14ee-97da9f1f6851.png)

► サンプルコード（画面レイアウト作成）： layout_PySimpleGUI.py

```ruby:サンプルコード（layout_PySimpleGUI.py）
import PySimpleGUI as sg

layout = [
   [sg.Text("ファイル"), sg.InputText(), sg.FileBrowse('ファイル選択', key="inputFilePath")],
   [sg.Button('確認')],
   [sg.Text(" ↓↓ 読み込んだExcel の内容を表示:")],
   [sg.Multiline(default_text='', size=(60,10), border_width=2, key='tb1')],
   [sg.Button('閉じる')]
]

window = sg.Window("ファイル読込", layout)

# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '閉じる':
        break
    elif event == '確認':
        # 処理の内容を記載
        sg.popup('処理内容の実装前')     

``` 
実行すると、画面レイアウトが表示されるのを確認できると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/ffddf71b-9c82-11c6-c42a-f993b2ddaac8.png)
<h3>OpenPyXLとは</h3>

OpenPyXLとは<b>「マクロ（VBA）のようにExcel操作できるライブラリ」</b>です。

:::note info
・「OpenPyXL」の公式サイト
https://openpyxl.readthedocs.io/en/stable/
:::

<h4>・OpenPyXLのインストール</h4>

「<b>pip install パッケージ名</b>」のコマンドで、ローカル環境のPowerShellにてインストールをします。
```インストール方法
pip install openpyxl
```

基本的な処理の流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/1d3a839e-7ab3-d947-3deb-b9cd51e16994.png)

<h4>【実践編】：OpenPyXLの使い方～ExcelファイルのA1セルに「はじめて試すOpenPyXL」と値を書き込む </h4>

以下のサンプルのように「openpyxl_hello.py」ファイルを作成後に
実行して、hello.xlsxファイルのA1セルに「はじめて試すOpenPyXL」と表示されることを確認しました。

```ruby:A1セルに値を書き込む（openpyxl _hello.py）
import openpyxl as op

wb = op.Workbook()
sheet = wb.active
sheet['A1'] = 'はじめて試す openpyxl'

# 必要に応じて記載
# wb.save('sample.xlsx')
# wb.close()

```

► 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/8e47c70e-4342-6142-f77a-1ae011a031d1.png)
先程作成した画面レイアウトを使って、
A1セルに「はじめて試すopenpyxl 」と値が書き込みされたExcelを読み込んだ後に
確認ボタンを押下した際に、内容が表示されるよう実装をしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/215adc4d-0cd0-65c3-4c99-e1c4c547caba.png)


```ruby:
import PySimpleGUI as sg
import openpyxl as op

layout = [
   [sg.Text("ファイル"), sg.InputText(), sg.FileBrowse('ファイル選択', key="inputFilePath")],
   [sg.Button('確認')],
   [sg.Text(" ↓↓ 読み込んだExcel の内容を表示:")],
   [sg.Multiline(default_text='', size=(60,10), border_width=2, key='tb1')],
   [sg.Button('閉じる')]
]

window = sg.Window("ファイル読込", layout)

# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '閉じる':
        break
    elif event == '確認':
        # 処理の内容を記載
        # sg.popup('処理内容の実装前') 
        
        wb = op.Workbook()
        sheet = wb.active
        sheet['A1'].value = 'はじめて試す openpyxl'
        
        window['tb1'].print(sheet['A1'].value)

window.close()
```

業務でPythonを使ってツールを作ったり、自動化処理を記述したりする機会がある方もいらっしゃると思います。自身のPCでVisual Studio Codeを使って簡単に今回のサンプルを試すことができますので、この機会にPythonに触れる時間を作っていただけると嬉しい限りです。

以上となります。