【问题标题】:Moving Worsksheet after a Named Worksheet in Excel using pywin32 Dispatch使用 pywin32 Dispatch 在 Excel 中的命名工作表之后移动工作表
【发布时间】:2018-10-08 08:57:50
【问题描述】:

我有大量文件需要将某个工作表从它们复制到另一个工作簿,它们需要放在具有特定名称的工作表之后,同时保留正在移动的工作表中的所有格式。

我在另一个线程中看到 pywin32 将是要走的路,但是我很难在命名表“之后”复制此表。

xl = Dispatch("Excel.Application")

xl.Visible = True  
xl.AskToUpdateLinks = False
xl.EnableEvents = False
xl.DisplayAlerts = False

wb1 = xl.Workbooks.Open(Filename=p1)
wb2 = xl.Workbooks.Open(Filename=p2)    
ws1 = wb1.Worksheets("ThisSheet")

##PROBLEM LINE HERE
ws1.Copy(After=wb2.Worksheets("AfterThisSheet"))
##END OF PROBLEM LINE

wb2.Sheets("ThisSheet").Name = "NewNameInNewWorkBook"
wb2.Close(SaveChanges=True)
wb1.Close(SaveChanges=True)

xl.Quit()

当我使用“之前”而不是“之后”时,此操作成功完成,但不幸的是我要复制的工作表在错误的位置结束。

当我使用“After”时,它会抛出一个错误。

我可以在 python 中使用其他包,如 pandas、xlrd 等,但是,它们似乎在保持格式不变方面存在问题。

提前致谢

【问题讨论】:

标签: python excel pywin32


【解决方案1】:

解决方案其实很简单,看来复制方法需要“之前”和“之后”的规范

##PROBLEM LINE HERE
ws1.Copy(After=wb2.Worksheets("AfterThisSheet"))
##END OF PROBLEM LINE

##CORRECT STATEMENT
ws1.Copy(None, After=wb2.Worksheets("AfterThisSheet"))
##END OF CORRECT STATEMENT

因此,在指定 After 之前,应将“None”传递给“Before”参数。

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2016-07-20
    • 2023-03-30
    • 2015-08-29
    相关资源
    最近更新 更多