win32com.client: Как скопировать рабочие листы с DispatchEx? - PullRequest
0 голосов
/ 01 мая 2018

Как вы копируете листы с DispatchEx? Я не могу скопировать одну рабочую таблицу из одной рабочей книги в другую рабочую таблицу из другой рабочей книги. Я использую DispatchEx, чтобы открыть их в двух отдельных экземплярах. Строка: ws1.Copy(Before=wb2.Worksheets(1)) выдает ошибку. Эта же строка работает для отправки, но мне нужно открыть файлы отдельно в Excel.

import time, os.path, os
from win32com.client import DispatchEx

path1 = 'C:\\example1.xlsx'
path2 = 'C:\\example2.xlsx'

xla = DispatchEx("Excel.Application")
xla.DisplayAlerts = False
xla.Visible = True

xl = DispatchEx("Excel.Application")
xl.DisplayAlerts = False
xl.Visible = True

curTime = os.path.getmtime('C:\\example1.xlsx')

while True:

    modTime = os.path.getmtime('C:\\example1.xlsx')

    if(modTime > curTime):

        wb1= xla.Workbooks.Open(Filename=path1)
        wb2= xl.Workbooks.Open(Filename=path2)
        ws1 = wb1.Worksheets(1)
        ws2 = xl.ActiveSheet
        ws1.Copy(Before=wb2.Worksheets(1))  # problem code here. Works in
                                            # dispatch 

Вот то, что ниже инструкции 'ws1.Copy (Before = wb2.Worksheets (1))'. Единственная разница в том, что я использую Dispatch, чтобы открыть две книги за один раз. Делая это таким образом, я могу скопировать ws1 в wb2. Но мастер-файл закрыт, он выдаст msg «файл, доступный для редактирования», хотя я указываю wb1.close ().

        wb1.Close()                         #close wb1 but still get msg
        #xla.Quit()                         #Quit() is the only way I can 
                                            #close out wb1 completely and 
                                            #not receive the  'file now 
                                            #available for edit' msg.  
                                            #But it close both books. 

        xla = Dispatch("Excel.Application") #starts up wb1 again if file 
                                            #is modified (path 1)
        xla.DisplayAlerts = False
        xla.Visible = True

Это трассировка, которую я получаю: игнорировать строку 35, так как некоторые закомментированные строки не были вставлены сюда.

Traceback (most recent call last):
  File "C:/Python34/updateExcel2Dispatch.py", line 35, in <module>
  ws1.Copy(Before=wb2.Worksheets(1))
  File "<COMObject <unknown>>", line 3, in Copy
  pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Office Excel', 'Copy method of Worksheet class failed', 'C:\\Program
  Files (x86)\\Microsoft Office\\Office12\\1033\\XLMAIN11.CHM', 0, -2146827284), None)"
...