expected str, bytes or os.PathLike object, not Workbook
时间: 2023-10-24 18:14:42 浏览: 174
解决TypeError: expected str, bytes or os.PathLike object, not int
这个错误通常发生在试图读取或写入文件时,但传递给函数的参数不是预期的字符串、字节或路径对象。在这个情况下,你可能在试图传递一个打开的 Excel 工作簿对象(Workbook),而不是其文件名或路径。
要解决这个问题,你需要找到你正在使用 Workbook 对象的代码,并确保你传递的是一个字符串、字节或路径对象。如果你需要使用打开的工作簿对象,你可以使用其 `save()` 方法来保存更改。
例如,在上一个示例中,我们在 `process_files()` 方法中打开了多个 Excel 文件,并将它们的第一个工作表复制到绩效总表中。在这个过程中,我们需要使用 `openpyxl.load_workbook()` 函数来打开这些文件。但是,在将工作表复制到绩效总表之前,我们需要确保这些文件已经关闭,否则可能会出现 "expected str, bytes or os.PathLike object, not Workbook" 错误。在这种情况下,我们可以使用 `with` 语句来打开和关闭这些文件,以确保它们被正确地释放:
```python
def process_files(self):
if not self.summary_file:
tk.messagebox.showerror("错误", "请先选择绩效总表")
return
for file in self.imported_files:
with openpyxl.load_workbook(file) as wb:
sheet_names = wb.sheetnames
first_sheet = sheet_names[0]
sheet = wb[first_sheet]
sheet.title = os.path.basename(file).split(".")[0]
with openpyxl.load_workbook(self.summary_file) as summary_wb:
summary_wb.create_sheet(sheet.title)
for row in sheet.rows:
summary_wb[sheet.title].append([cell.value for cell in row])
summary_wb.save(self.summary_text.get("1.0", tk.END).strip())
self.output_text.insert(tk.END, "已处理完成")
```
在这个示例中,我们使用 `with` 语句来打开 `wb` 和 `summary_wb` 对象,并在每个文件操作后自动关闭它们。这确保了我们正确地释放了这些文件句柄,并避免了 "expected str, bytes or os.PathLike object, not Workbook" 错误。
阅读全文