我有 30 个具有命名约定的工作簿(
myfile1.xlsm
、myfile2.xlsm
、myfile3.xlsm
、.. 等)。我想在所有 30 个工作簿的特定工作表 Q
的特定列 sheet1
的下一个空单元格中输入文本。下面的代码非常适合一个工作簿,但我需要对所有 30 个工作簿做同样的事情,所以我尝试将其放入 python 函数中,如何将下面的代码放入函数中,以便我可以将其应用于所有 30 个文件同时?
import openpyxl
from openpyxl import Workbook, load_workbook
from openpyxl.cell import Cell
wb = openpyxl.load_workbook('C:/Users/me/randomfolder/myfile1.xlsm', keep_vba=True)
ws = wb["Sheet1"]
#insert text in the first empty cell in column Q starting from cell Q5
for row in ws['Q5:Q1000']:
cell = row[0]
if cell.value is None:
cell.value = 'random text'
break
#save file
wb.save(r'C:/Users/me/randomfolder/myfile1.xlsm')
如果您的
.xlsm
文件位于同一目录中(在您的情况下为 "C:/Users/me/randomfolder"
),则可以使用 Path.glob
返回它们的路径并将它们作为 openpyxl.load_workbook
的参数传递 在 for 循环中一一进行。
试试这个:
from pathlib import Path
import openpyxl
from openpyxl import Workbook, load_workbook
from openpyxl.cell import Cell
files_directory = "C:/Users/me/randomfolder"
for file in Path(files_directory).glob("*.xlsm"):
wb = openpyxl.load_workbook(file, keep_vba=True)
ws = wb["Sheet1"]
#insert text in the first empty cell in column Q starting from cell Q5
for row in ws['Q5:Q1000']:
cell = row[0]
if cell.value is None:
cell.value = 'random text'
break
#save file
wb.save(file)