我有一个简单的功能“复制”,用于复制和粘贴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()
答案 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)
对不起,这不是答案,但不符合评论:
您可以尝试以下操作,并在这种情况下发布您仍有问题:
UsedRange.Copy()
行PasteSpecial
行UsedRange.Copy()
行和PasteSpecial
行excel_workbook1.Worksheets(Sheet).UsedRange.Copy()
删除行到del excel_workbook2
excel_app = win32com...
删除所有行到Copy()的结尾,并删除win32com的导入更新:
根据user3231222的结果,再进行两项测试:
UsedRange.Copy()
和excel_app.Quit()
之间(但不包括)错误仍然发生的所有内容。