2014-02-21 29 views
1

我有一个简单的功能“复制”,复制和粘贴与win32com。它运行几次没有问题。使用win32com复制粘贴错误(Glade GTK Python)

但是如果我使用按钮(GUI GTK Glade)来触发函数“Copy()”,它只运行一次。第二次我得到以下错误:

Gdk-CRITICAL (recursed) **: inner_clipboard_window_procedure: 
assertion `success' failed 
aborting... 

你能帮我吗?

CopyPaste:

import os, sys 
import win32com.client 

def Copy(): 
    # Pfad zum Template 
    path_to_temp = r"C:\004_Python_Workspace\Persek\Template.xls" 

    # Pfad zum Testpaket 
    xlsPath = r"C:\004_Python_Workspace\Testfolder\Testanweisung_LK_ASL.xls" 

    # Blattname im Template und im Testpaket 
    Sheet = 'ECU_Config' 

    excel_app = win32com.client.dynamic.Dispatch('Excel.Application') 

    ###### Kopiere ECU_Config aus Template ##### 
    excel_workbook1 = excel_app.Workbooks.Open(path_to_temp) 

    excel_workbook1.Worksheets(Sheet).UsedRange.Copy() 

    ###### Fuege in das neue Testpaket ein #####  
    excel_workbook2 = excel_app.Workbooks.Open(xlsPath) 
    excel_workbook2.Worksheets(Sheet).Range('A1').PasteSpecial() 
    excel_workbook2.worksheets(Sheet).Columns('A:B').AutoFit() 
    excel_workbook2.Close(SaveChanges=True) 
    del excel_workbook2 

    excel_workbook1.Close() 
    del excel_workbook1 
    excel_app.Quit()  

Glade的GTK触发与按钮:

def on_debug_clicked(self, object, data=None): 
    CopyPaste_Error.Copy() 

更新1A: 直到 “UsedRange.Copy()” 行是全部相同。

excel_workbook1.Worksheets(Sheet).UsedRange.Copy() 
    excel_app.Quit() 
+0

这是类似于http://stackoverflow.com/questions/15690277/gtk-error-when-copy-paste-performed-outside-of-application – WombatPM

+0

你好WombatPM,也许它相同但没有解决方案。我必须做什么? – user3231222

回答

1

现在我找到了电子表格,你是否得到相同的错误解决方案,但我不知道为什么。我有“win32clipboard”

import os, sys 
import win32com.client 
import win32clipboard 

def Copy(): 

    win32clipboard.OpenClipboard() 

    # Pfad zum Template 
    path_to_temp = r"C:\004_Python_Workspace\Persek\Template.xls" 

    # Pfad zum Testpaket 
    xlsPath = r"C:\004_Python_Workspace\Testfolder\Testanweisung_LK_ASL.xls" 

    # Blattname im Template und im Testpaket 
    Sheet = 'ECU_Config' 

    excel_app = win32com.client.dynamic.Dispatch('Excel.Application') 

    ###### Kopiere ECU_Config aus Template ##### 
    excel_workbook1 = excel_app.Workbooks.Open(path_to_temp) 

    excel_workbook1.Worksheets(Sheet).UsedRange.Copy() 

    ###### Fuege in das neue Testpaket ein #####  
    excel_workbook2 = excel_app.Workbooks.Open(xlsPath) 
    excel_workbook2.Worksheets(Sheet).Range('A1').PasteSpecial() 
    excel_workbook2.worksheets(Sheet).Columns('A:B').AutoFit() 
    excel_workbook2.Close(SaveChanges=True) 
    del excel_workbook2 

    excel_workbook1.Close() 
    del excel_workbook1 
    excel_app.Quit() 

    win32clipboard.CloseClipboard() 
+0

+1无法解释,但它的工作原理。你也应该接受它,因此关闭。 – Schollii

+0

感谢您的支持和时间:-) – user3231222

0

对不起,这不是一个答案,但不适合在评论:

你可以尝试以下,及后在这种情况下,你仍然有问题:

  1. 如果您只是删除UsedRange.Copy()线
  2. 如果你只是删除PasteSpecial线
  3. 如果同时删除UsedRange.Copy()线在PasteSpecial线
  4. 如果您从excel_workbook1.Worksheets(Sheet).UsedRange.Copy()线del excel_workbook2
  5. 如果从excel_app = win32com...删除所有行结束复制(),及时排除进口win32com

更新:

基于user3231222的结果,还有两个测试:

  1. 确认是否注释掉(但不包括)行UsedRange.Copy()excel_app.Quit()错误仍然发生。
  2. 如果是这样,请检查您是否更换装有一个有说只是一对夫妇在他们的文字细胞(没有公式或格式化等)
+0

1.错误,因为没有复制粘贴之前是不可能 2.错误:inner_clipboard_window_procedure 3.没有错误 4.没有错误 5.没有错误 – user3231222

+0

更新:1A,注释掉之间的所有这些还指出workbook1.close和德尔workbook1 - >我在第一次运行时遇到错误 – user3231222

+0

更新:1b,在UsedRange之间注释掉所有内容。复制()和excel_workbook1.Close() - >我在第二次运行 – user3231222