我有一个文件夹('rogaikopyta'),里面有1 000个xlsx格式的文件。我需要从这些文件中提取数据(B2和D2单元格),并将它们按顺序打印在一个xlsx文件中。原始代码是
导入openpyxl
输入操作系统
导入pathlib
从openpyxl导入load_workbook, Workbook。
路径='C:UsersUserDocumentsVisual Studio 2017DjangoWebProject1DjangoWebProject1approgaikopyta'
for file in os.listdir(path).wb2.save("output.xlsx")。
wb=load_workbook(os.path.join(path,file), read_only=True)
ws=wb.active
wb2 = Workbook(write_only=True)
ws2 = wb2.create_sheet()
for row in ws.iter_rows(min_col=2, max_col=4, min_row=2, max_row=2, values_only=True):
ws2.append([row[0], row[-1]])
wb2.save("output.xlsx")
我想,它给出了很多关于每个xlsx文件的错误。
像这样。
异常被忽略:
回溯(最近一次调用):
文件 "C:\Users/User/PycharmProjects/untitled3/venv/lib/sit-packages/openpyxl/worksheet_write_only.py",第74行,在_write_rows中。
pass
文件 "C:Users/User/AppData/Local/Programs/Python/Python37-32/lib/contextlib.py",第119行,in 退出
next(self.gen)
文件 "C:\Users\User/PycharmProjects\untitled3\venv\lib/sitite-packages\et_xmlfile\xmlfile.py",第50行,在元素中。
self._write_element(el)
文件 "C:\Users\User/PycharmProjects\untitled3\venv\lib/sitite-packages\et_xmlfile\xmlfile.py",第50行,在元素中。
self._write_element(el)
文件 "C:\Users\User\PycharmProjects\untitled3\venv\libsite-packages\et_xmlfile\xmlfile.py",第78行,在_write_element中。
self._file.write(xml)
ValueError: 写入已关闭的文件
这让我很困扰!这段代码是怎么回事?
你也许应该读一读 os
模块和 pathlib
模块,以及检查你的代码是否适用于最新版本的openpyxl。
os.listdir(path)
返回一个文件夹中的文件列表,所以下面的内容应该能让你看到你的进展。
from openpyxl import load_workbook, Workbook
target_wb = Workbook()
target_ws = wb.active
for file in os.listdir(path):
wb = load_workbook(os.path.join(path, file), read_only=True)
ws = wb.active
for row in ws.iter_rows(min_col=2, max_col=4, min_row=2, max_row=2, values_only=True):
target_ws.append([row[0], row[-1])
target_wb.save("output.xlsx")
现在你的代码看起来像
import openpyxl
输入操作系统
导入pathlib
从openpyxl导入load_workbook, Workbook。
路径='C:UsersUserDocumentsVisual Studio 2017DjangoWebProject1DjangoWebProject1approgaikopyta'
for file in os.listdir(path).wb2.save("output.xlsx")。
wb=load_workbook(os.path.join(path,file), read_only=True)
ws=wb.active
wb2 = Workbook(write_only=True)
ws2 = wb2.create_sheet()
for row in ws.iter_rows(min_col=2, max_col=4, min_row=2, max_row=2, values_only=True):
ws2.append([row[0],row[-1]])
wb2.save("output.xlsx")
但它仍然给出了一个访问错误,指的是1000个文件。
异常忽略:
回溯(最近一次调用)。
文件 "C:\Users/User/PycharmProjects/untitled3/venv/lib/sitite-packages/openpyxl/worksheet_write_only.py",第74行,在_write_rows中。
pass
文件 "C:Users/User/AppData/Local/Programs/Python/Python37-32/lib/contextlib.py",第1行。
119,在 退出 next(self.gen)
文件 "C:\Users/User/PycharmProjects/untitled3/venv/lib/site-packages/set_xmlfile/xmlfile.py",第50行,在元素self._write_element(el)
文件 "C:\Users\User\PycharmProjects\untitled3\venv\libsite-packages\et_xmlfile\xmlfile.py",第78行,在_write_element self._file.write(xml)
ValueError: 写入已关闭的文件
异常忽略中。回溯(最近一次调用)。
文件 "C:\Users/User/PycharmProjects/untitled3/venv/lib/sitite-packages/openpyxl/worksheet_write_only.py",第74行,在_write_row中传递了以下信息
如果我在ws.iter_rows(min_col=2, max_col=4, min_row=2, max_row=2, values_only=True)中放入:for row。
ws2.append([row[0],row[-1]])
wb2.save("output.xlsx")
它只给出了一个周期的结果, 即只给一个文件xlsx, 我需要给文件夹中的所有1000个文件. 能否请你建议是怎么回事?