今まで手作業で編集していたエクセルファイルを自動で読み書きできると、いろいろな業務効率化が期待できると思います。ここでは以下のを紹介します。
- フォルダ内のすべてのExcelファイルに対して処理を実行したい場合
- ExcelファイルBook内のすべてのシートに対して処理を実行したい場合
フォルダ内のすべてのExcelファイルに対して処理を実行
os.walkでフォルダ内を検索し拡張子.xls* が含まれるか確認
import os
for root, dirs, files in os.walk("./"):
for file in files:
ext = os.path.splitext(file)[1]
ext = ext.lower()
if ".xls" in ext:
print(file)
ExcelファイルBook内のすべてのシートに対して処理を実行
wb.sheetnamesでシート名リストが取得できます。
import openpyxl
File = "test.xlsx"
#Fileを開く
wb = openpyxl.load_workbook(File)
#Book内のすべてのsheet名リストを取得
sheetnames = wb.sheetnames
print(sheetnames)
#sheet名リストから1つずつsheet名を取りだす
for sheetname in sheetnames:
sheet = wb[sheetname]
#ここにsheetを操作するコードを書く
#sheet.cell(row=1, column=1).value = sheetname
#Fileを保存
wb.save(File)
結合:フォルダ内のすべてのExcelファイルのすべてのシートに対して処理を実行
マクロ有効ブック xlsmの場合は、keep_vba=True オプションを付ける必要あり
import os
import openpyxl
for root, dirs, files in os.walk("./"):
for file in files:
ext = os.path.splitext(file)[1]
ext = ext.lower()
if ".xls" in ext:
if ".xlsx" in ext:
wb = openpyxl.load_workbook(file)
if ".xlsm" in ext:
wb = openpyxl.load_workbook(file, keep_vba=True)
sheetnames = wb.sheetnames
print(sheetnames)
for sheetname in sheetnames:
sheet = wb[sheetname]
# ここにsheetを操作するコードを書く
# sheet.cell(row=1, column=1).value = sheetname
wb.save(file)