python - win32com.client: Sådan kopieres regneark med DispatchEx?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kopierer du regneark med DispatchEx? Jeg kan ikke kopiere fra et regneark fra en projektmappe til et andet regneark på en anden arbejdsbog. Jeg bruger DispatchEx for at åbne dem i to separate exceller. Linjen: ws1.Copy(Before=wb2.Worksheets(1)) giver en fejl. arbejder til afsendelse, men jeg skal åbne filerne separat i 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 


Her er hvad der er under 'ws1.Copy (Før=wb2.Worksheets (1))' erklæring. Den eneste forskel er, at jeg bruger Dispatch til at åbne to workbooks i en gang. Gør det på denne måde giver mig mulighed for at kopiere ws1 til wb2. Men men masterfilen er lukket, vil den kaste msg 'fil til rådighed til redigering', selvom jeg specificerer 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


Dette er det spor, jeg får: Ignorer linje 35, da nogle kommenterede linjer ikke blev indsat her.


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)"

Bedste reference