LoginSignup
2
4

More than 1 year has passed since last update.

【PythonでExcel操作】すべてのExcelファイル・シートに対して処理を実行

Last updated at Posted at 2022-02-11

今まで手作業で編集していたエクセルファイルを自動で読み書きできると、いろいろな業務効率化が期待できると思います。ここでは以下のを紹介します。

  • フォルダ内のすべてのExcelファイルに対して処理を実行したい場合
  • ExcelファイルBook内のすべてのシートに対して処理を実行したい場合

file_icon_text_xls.pngfile_icon_text_xls.pngfile_icon_text_xls.png

フォルダ内のすべての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)

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4