使用win32com复制粘贴时出错(Glade GTK Python)

时间:2014-02-21 16:07:44

标签: python clipboard copy-paste glade win32com

我有一个简单的功能“复制”,用于复制和粘贴win32com。它运行几次没有问题。

但是如果我使用一个按钮(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()

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

对不起,这不是答案,但不符合评论:

您可以尝试以下操作,并在这种情况下发布您仍有问题:

  1. 如果您只删除UsedRange.Copy()
  2. 如果您只删除PasteSpecial
  3. 如果同时删除UsedRange.Copy()行和PasteSpecial
  4. 如果您从excel_workbook1.Worksheets(Sheet).UsedRange.Copy()删除行到del excel_workbook2
  5. 如果您从excel_app = win32com...删除所有行到Copy()的结尾,并删除win32com的导入
  6. 更新:

    根据user3231222的结果,再进行两项测试:

    1. 确认是否注释了UsedRange.Copy()excel_app.Quit()之间(但不包括)错误仍然发生的所有内容。
    2. 如果确实如此,请检查是否更换了加载了电子表格的电子表格,该表格只包含几个带有文字的单元格(没有公式或格式等)