|
发表于 2023-9-9 21:47:54
|
显示全部楼层
本帖最后由 陶远航 于 2023-9-9 21:51 编辑
您的问题可能出在这行代码 a = input("请输入你要合并的工作表(工作表1输入0,工作表2输入1):")。这行代码会在控制台等待用户输入,但是如果您在没有控制台的环境(例如某些IDE,或者图形用户界面)中运行代码,可能会出现问题。
如果您想要固定合并特定的工作表,可以直接将 a 设置为该工作表的索引,例如 a = 0 或 a = 1,而不是通过 input() 函数获取。这样,worksheet2 = workbook2.sheets[int(a)] 这行代码就会始终使用同一个工作表索引。
以下是修改后的代码:
- import easygui as eg
- import xlwings as xw
- from pathlib import Path
- app = xw.App(visible=True, add_book=False)
- workbook1 = app.books.add()
- worksheet1 = workbook1.sheets[0]
- folder_path = Path(eg.diropenbox(msg=None, title=None, default=None))
- file_list = folder_path.glob('*.xlsx')
- a = 0 # 直接设置工作表索引
- for i in file_list:
- workbook2 = app.books.open(i)
- worksheet2 = workbook2.sheets[int(a)]
- worksheet2.copy(after=worksheet1)
- workbook2.close()
- worksheet1.delete() # 移动到 for 循环之外
- # 最后保存和关闭工作簿
- workbook1.save(eg.filesavebox(msg=None, title=None, default='*.xlsx', filetypes=None))
- workbook1.close()
- app.quit()
复制代码
希望这个修改能解决您的问题!如果还有其他问题,请随时告诉我。我很乐意帮助您!
如果以上代码依旧不能正常运行的话,我可以给您一些建议,希望能对您有所帮助:
1、您在代码中使用了 input 函数来获取用户输入的工作表索引。这个函数返回的是一个字符串类型的值,而不是一个整数类型的值。因此,如果您直接将其传递给 sheets 方法,可能会导致类型错误或索引错误。为了避免这个问题,您需要在使用 input 函数之后,将其转换为整数类型,例如:a = int(input(“请输入你要合并的工作表(工作表1输入0,工作表2输入1):”))
2、您在代码中使用了 glob 模块来获取文件列表。这个模块返回的是一个生成器对象,而不是一个列表对象。因此,如果您想要对其进行多次迭代或索引操作,可能会出现意想不到的结果。为了避免这个问题,您需要在使用 glob 方法之后,将其转换为列表类型,例如:file_list = list(folder_path.glob(‘*.xlsx’))
3、您在代码中使用了 easygui 模块来获取用户选择的文件夹路径和保存文件名。这个模块返回的是一个字符串类型的值,而不是一个 Path 类型的值。因此,如果您想要使用 Path 类型的方法或属性,例如 glob 或 name ,可能会出现属性错误或方法错误。为了避免这个问题,您需要在使用 easygui 方法之后,将其转换为 Path 类型,例如:folder_path = Path(eg.diropenbox(msg=None, title=None, default=None)) |
|