Я создал обходной путь для этой ошибки.Я создал свой собственный класс потока и поместил код, где я что-то сделал с xlwings, в функцию запуска и использую сигналы для связи с основным потоком.
Ошибка произошла, когда я использовал app.kill () в потоке.
В моем графическом интерфейсе / пользовательском интерфейсе я создал пустой список до начала потока, добавил метод app, а затем получил доступ к элементу в списке, чтобы уничтожить Excel после завершения потока.Это сработало для меня.
######This is the code in my ui init method######
self.saveThread = SaveThread()
self.saveThread.finished.connect(self.on_finished)
def SaveRun(self):
'Save Run File to directory'
try:
directory = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
saveDirectory.append(directory)
app = xw.App(visible=False)
appList.append(app)
self.saveThread.start()
def on_finished(self):
appList[-1].kill()
class SaveThread(QtCore.QThread):
saveSignal = pyqtSignal()
def __init__(self, parent = None):
super().__init__(parent)
def run(self):
book = xw.Book(r'{0}\Template_VS.xlsx'.format(TemplateDirectory[-1]))
### Do something with excel
book.save(r'{0}\{1}.xlsx'.format(newDirectory[-1], nameList[-1]))
self.saveSignal.emit()