在多线程里面使用win32com调用com组件的时候,需要用pythoncom.CoInitialize初始化一下。
最后还需要用pythoncom.CoUninitialize释放资源。
import win32com.client as win32
import pythoncomdef copy_all_sheets_to_single_file(source_files, destination_file):pythoncom.CoInitialize()excel = win32.gencache.EnsureDispatch("Excel.Application")excel.Visible = Falseexcel.DisplayAlerts = Falsetry:destination_workbook = excel.Workbooks.Add()destination_sheet = destination_workbook.Worksheets(1)destination_sheet2 = destination_workbook.Worksheets(2)row_offset = 0for index, source_file in enumerate(source_files):source_workbook = excel.Workbooks.Open(source_file)source_sheet = source_workbook.Worksheets("Sheet1")source_sheet2 = source_workbook.Worksheets("Sheet2")source_range = source_sheet.UsedRangesource_range2 = source_sheet2.UsedRangeif index != 0:add_number = 6else:add_number = 0source_range.Copy(destination_sheet.Range("A" + str(row_offset + 1 + add_number)))source_range2.Copy(destination_sheet2.Range("A" + str(row_offset + 1 + add_number)))row_offset += source_range.Rows.Countsource_workbook.Close(SaveChanges=False) # 不保存更改,避免提示保存对话框destination_workbook.SaveAs(destination_file)except Exception as e:print(f"Error occurred: {str(e)}")finally:destination_workbook.Close()excel.Quit()excel.Application.Quit()win32.pythoncom.CoUninitialize()# 使用示例
source_files = ["路径/到/源文件1.xlsx", "路径/到/源文件2.xlsx", ..., "路径/到/源文件10.xlsx"]
destination_file = "路径/到/目标文件.xlsx"
# 使用示例
soure_file = r"C:\Users\Administrator\Documents\Book1.xlsx"
soure_file2 = r"C:\Users\Administrator\Documents\Book2.xlsx"
source_files = [soure_file, soure_file2]
destination_file = r"C:\Users\Administrator\Documents\Book_new.xlsx"copy_all_sheets_to_single_file(source_files, destination_file)# 使用示例
soure_file = r"C:\Users\Administrator\Documents\Book1.xlsx"
soure_file2 = r"C:\Users\Administrator\Documents\Book2.xlsx"
source_files = [soure_file, soure_file]
destination_file = r"C:\Users\Administrator\Documents\Book_new.xlsx"# copy_all_sheets_to_single_file(source_files, destination_file)
参考
https://yshblog.com/blog/57