Pythonファイル処理 - Excel自動処理(openpyxlを使用)

openpyxl の概要

openpyxl は、Excel スプレッドシートを処理するために Eric Gazoni と Charlie Clark が共同開発した Python サードパーティ ライブラリです。サードパーティのライブラリであるため、システム環境に応じて適切なコマンドを使用してローカルにインストールする必要があります。コマンドは次のとおりです。

Windows システム: pip install openpyxl
MacOS システム: pip3 install openpyxl

openpyxl ライブラリは、xlsx/xlsm/xltx/xltm などの Excel 2010 以降のスプレッドシート形式を処理できます。

openpyxlのインポート

openpyxl ライブラリを使用するには、まずインポートする必要があります。次のコードを見てみましょう。

import openpyxl

# 通过文件路径,打开工作簿
wb1 = openpyxl.load_workbook('./demo_excel.xlsx')
# 用 Workbook() 创建新工作簿
wb2 = openpyxl.Workbook()

上記のコードでは、まず import を使用して openpyxl ライブラリを直接インポートし、次に openpyxl.load_workbook() を使用して既存のワークブックを開き、openpyxl.Workbook() を使用して新しいワークブックを作成します。

ただ、openpyxl.を使うたびに持ってこないといけないのでちょっと面倒です。

便宜上、今日は新しいインポート方法を説明します: from...import....

from...import... は import ステートメントの変形で、ライブラリまたはモジュール内の関数、メソッド、クラス、または変数をインポートできます。

構文は、from library/module import function/method/class/variable です。

from...import... を使用すると、複数の名前を 1 行にインポートし、異なる名前をカンマで区切ることができます。

例: ライブラリ/モジュールインポート関数 1、クラス 1 から。

したがって、上記のコードは次のように書き換えることができます。

from openpyxl import load_workbook, Workbook

# 通过文件路径,打开已有工作簿
wb1 = load_workbook('./demo_excel.xlsx')
# 用 Workbook() 创建新工作簿
wb2 = Workbook()

from openpyxl import load_workbook, Workbook のように書かれたコードの最初の行に注目してください。その後、インポートされた関数/メソッド/クラス/変数を直接使用できます。

Excelのテーブル操作

通常、一連の手動操作は次のように要約できます。

1. ワークブックを開く
2. ワークシートを確認する
3. セルを操作する

openpyxlの関連知識をマニュアル操作の順に説明しますので、下図を参照してください。
Excelのテーブル操作
openpyxl の定義によれば、.xlsx 形式の Excel ファイルはワークブック オブジェクトを表すため、まずワークブック オブジェクトの取得方法を学び、次にワークブック オブジェクトの基本的な操作を学びましょう。

ワークブックオブジェクトを取得する方法

ロードワークブック(ファイル名)

ワークブック オブジェクトを取得する最初の方法は、確かによく知られています。openpyxl ライブラリの関数load_workbook(filename) を使用する必要があります。パラメータ filename は、ワークブックのパス、つまり .xlsx ファイルのパスを表します。この関数はワークブック オブジェクトを返します。

ワークブック()

Workbook クラスをインスタンス化してワークブック オブジェクトを取得することもできます (より正確には、これはワークブック オブジェクトを作成する方法です)。

構文は非常に単純で、Workbook() として記述するだけであり、括弧内にパラメータを記述する必要はありません。

ワークブック オブジェクトを取得するには上記 2 つの方法がありますが、ここではワークブック オブジェクトに関する基本的な操作を紹介します。

ワークブックオブジェクトの操作

保存(ファイル名)

Workbook クラスをインスタンス化して、新しいワークブック オブジェクトを正常に作成しました。新しく作成したワークブック オブジェクトをローカルに保存したい場合は、ワークブック オブジェクトの save() メソッドを使用する必要があります。
構文は次のとおりです: workbook object.save(filename)。パラメータ filename は、新しいワークブックのファイル パスを表します。ここでは、新しいワークブックのパスとして .xlsx で終わることをお勧めします。

load_workbook(filename) を通じて取得したワークブック オブジェクトは、save(filename) メソッドを使用することもできます。

パラメータのファイル名が変更されない場合は、元のパスに保存されます。これは、元のファイルを変更するのと同じです。パラメータのファイル名が変更される場合は、新しいパスに保存されます。これは、新しいファイルとして保存するのと同じです。
写真でまとめるとこんな感じです。
save() メソッド

ワークシートオブジェクトを取得する方法

ワークシートは、ワークブックの下部にあるタブです。実際の操作では、さまざまなラベルをクリックすることでさまざまなワークシートを選択できます。
ワークシート
実際のワークシートはopenpyxlのワークシートオブジェクト(Worksheetオブジェクト)に相当します。
ワークシート オブジェクト (Worksheet オブジェクト) は、ワークブック内のワークシートを表します。

アクティブな属性

active はアクティブなワークシートを取得します。アクティブなワークシートとは何ですか?

通常、アクティブなワークシートは現在選択されているワークシートを指します。.xlsx ファイルを開いた後、デフォルトで表示されるワークシートがアクティブなワークシートになります。

テーブル名でテーブルを取得

ワークシートの名前がわかっている場合は、テーブル名にインデックスを付け、ワークブック オブジェクト ['テーブル名'] を使用して、指定されたワークシート オブジェクトを取得できます。一般に、ワークブック内に複数のワークシートがあり、これらのワークシートの名前がわかっている場合は、テーブル名でテーブルをフェッチする方法を使用できます。

ワークシート オブジェクトを取得する次の 2 つの方法を比較し、実際のニーズに基づいてどちらの記述方法を使用するかを決定できます。
ワークシートの取得

ワークシートオブジェクトの基本操作

単一の行または列を取得します

Excel の表では、行番号を表すために数字が使用され、列名を表すために英語の文字が使用されます。
openpyxl では、ワークシート オブジェクト [行番号] またはワークシート オブジェクト ['列名'] を通じてタプルを取得できます。このタプルには、指定された行または列のすべてのデータが含まれています。

複数行のデータを取得する (iter_rows())

ワークシート オブジェクトの iter_rows() メソッドを使用すると、テーブル内の指定された範囲内の複数行のデータを取得できます。

iter_rows() の構文を次の図に示します。
iter_rows()
パラメータ min_row と max_row は、それぞれ最小行インデックスと最大行インデックスを表します。最小行インデックスのデフォルト値は 1 で、最大行インデックスのデフォルト値は、データが含まれる一番下の行の行数になります。テーブル;

パラメータ min_col と max_col はそれぞれ最小列インデックスと最大列インデックスを表します。最小列インデックスのデフォルト値は 1 で、最大列インデックスの値はデフォルトでデータが含まれる右端の列の列数になります。テーブル;

パラメータ value_only は、セルの値を返すかどうかを決定します。True の場合はセルの値が返され、False の場合はセル オブジェクトが返されます。通常、データを読み取るだけの場合はこのパラメータを True に設定する必要がありますが、データを書き込む場合はデフォルトの False のままにしておきます。

ワークシート オブジェクトのメソッド iter_rows() は、n 個のタプルを含む反復可能オブジェクトを返します。ここで、n はパラメータで指定された行数であり、各タプルはテーブル内の行を表します。

したがって、通常、 iter_rows() は for ループと組み合わせて使用​​され、返される反復可能オブジェクト内の各タプル、つまりテーブル内の指定された範囲内のデータの各行を取り出すことができます。

iter_rows() メソッドは、指定された行にデータがない場合に空のタプルが返されることを指定します。

パラメータ value_only がデフォルト値の False のままである場合、 iter_rows() メソッドは指定された範囲内のセル オブジェクトを返します。値に加えて、セル オブジェクトにはフォーマットなどの一連の属性も含まれます。

データの追加

ワークシート オブジェクトの append() を使用してデータ行を追加できます。このメソッドはよく知られていると思います。

このメソッドは、いくつかの反復可能なオブジェクト (リストやタプルなどの一般的なオブジェクト) をワークシート オブジェクトに追加できます。つまり、テーブルの末尾にデータ行を追加します。

構文も非常に簡単で、 worksheet object.append (list/tuple) と記述するだけです。

ただし、append() を使用してデータを追加した後、追加されたデータをローカル Excel ファイルで確認したい場合は、ワークブックを保存する必要があります。つまり、ワークブック オブジェクトの save() メソッドを使用する必要があります。

具体的な書き方については以下のコードを参照してください。

from openpyxl import load_workbook

# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./公司人员名单.xlsx')
# 获取活动工作表
active_ws = staff_wb.active

info_list = ['S1911', '萧爵瑟', 3000, '内容']
info_tuple = ('S1912', '吴琐薇', 5000, '销售')

active_ws.append(info_list)
active_ws.append(info_tuple)

# 保存工作簿为【append_demo.xlsx】
staff_wb.save('./append_demo.xlsx')

上記のコードでは 2 行のデータが追加されていますが、この 2 行のデータはリストとタプルであり、実際にワークシートの最後に追加されます。上記のコードをローカルで実行すると、対応する xlsx ファイル [append_demo.xlsx] が生成されます。
例

知識ポイントのまとめ

ここに画像の説明を挿入します

セルオブジェクト

cell オブジェクトはワークシート内のセルを表します。
以下の図に示すように:
ここに画像の説明を挿入します
基本的に、行と列に対するすべての操作は、最終的にはセルに対する操作に戻すことができます。

セルオブジェクトの取得方法

1 つ目: iter_rows() を使用して指定された範囲内の行を取得し、インデックスを使用して行からセル オブジェクトを取得します。

ワークシート object.iter_rows() の for row を通じて、指定された範囲の行を取得します。パラメータ value_only がデフォルトの False の場合、取得する行はセル オブジェクトで構成されるタプルであり、インデックスまたは for ループを介して走査できます。個々のセル オブジェクトを取得します。
サンプルグラフ:
ここに画像の説明を挿入します

2 番目のタイプ: 行番号または列名で特定の行または列を指定し、for ループをたどって指定された行または列の各セル オブジェクトを取得します。

ワークシート オブジェクトのセル [行数] の
場合 ワークシート オブジェクトのセル ['列名'] の場合

from openpyxl import load_workbook

# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./codes/material/公司人员名单.xlsx')
# 获取活动工作表
staff_ws = staff_wb.active

# for循环遍历,取出第三行的所有单元格对象
for row_cell in staff_ws[3]:
    print(row_cell)

# for循环遍历,取出第三列(C列)的所有单元格对象
for col_cell in staff_ws['C']:
    print(col_cell)

このコードは、指定された行と列のすべてのセル オブジェクトを出力します。
ここに画像の説明を挿入します

3 番目の方法: セル座標を通じて特定のセルを指定する

ワークシート オブジェクト ['セル座標'] を通じて特定のセル オブジェクトを直接取得します。たとえば、ワークシート オブジェクト ['A1'] は、テーブル内のセル A1 に対応するセル オブジェクトを取得します。
サンプルコード:

from openpyxl import load_workbook

# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./codes/material/公司人员名单.xlsx')
# 获取活动工作表
staff_ws = staff_wb.active

# 打印单元格对象A1
print(staff_ws['A1'])

出力結果:

bash:root$ python /home/python-class/root/main14.py
<Cell '下半年公司名单'.A1>

セルオブジェクトの基本操作

値属性

セル オブジェクトの value 属性を使用すると、特定のデータを取得できます。同時に、この属性を通じてセル オブジェクトに値を割り当てることもできます (セルの値を変更したり、セルに値を追加したりすることもできます)。細胞)。
具体的な書き方は以下の通りです。

# 获取单元格的值
单元格对象.value
# 给单元格对象赋值
单元格对象.value =

例:

from openpyxl import load_workbook

# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./codes/material/公司人员名单.xlsx')
# 获取活动工作表
staff_ws = staff_wb.active

# 打印单元格对象C2的值
print(staff_ws['C2'].value)

# 修改单元格对象C2的值为10000
staff_ws['C2'].value = 10000

# 打印修改后的单元格对象C2的值
print(staff_ws['C2'].value)

# 将结果保存为【公司人员名单_new.xlsx】
staff_wb.save('./codes/material/公司人员名单_new.xlsx')

コードの 8 行目で、セル C2 の元の値 8000 を出力します。
11 行目から 15 行目では、セル オブジェクト .value を使用してセル C2 に 10000 を割り当て、元の値を変更し、変更した結果を出力します。
結果は以下のようになります。
ここに画像の説明を挿入します

まとめ

ここに画像の説明を挿入します

知識ポイントのまとめ

マインドマップを要約しましょう:
ここに画像の説明を挿入します
重要な点と難しい点のまとめ:
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41308872/article/details/131458711#comments_28559234