使用openpyxl模块处理带有xlsx文件的文件夹。

问题描述 投票:0回答:1

我有一个文件夹('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: 写入已关闭的文件

这让我很困扰!这段代码是怎么回事?

openpyxl xlsx
1个回答
0
投票

你也许应该读一读 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")

0
投票

现在你的代码看起来像

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个文件. 能否请你建议是怎么回事?

© www.soinside.com 2019 - 2024. All rights reserved.