Ошибка при перемещении папки, после обработки данных с помощью xlwings - PullRequest
0 голосов
/ 16 мая 2019

Моя программа копирует шаблон Excel, редактирует его с помощью xlwings, и когда процесс завершится, она должна переместить папку.

Я использую QThread, чтобы сделать это в фоновом режиме, чтобы мой графический интерфейс не зависал.

В настоящее время я получаю ошибку shutil при перемещении файла, потому что файл не полностью завершил обработку, прежде чем он перемещает его.Я знаю это, потому что после того, как я снова попробую кнопку сохранения, она будет делать то, что ей нужно.

Я пытался использовать метод времени, чтобы поспать несколько секунд, пока процесс не будет завершен, но это занимает слишком много времени.

Ошибка:

  • shutil.Error: [('C: \ Workspace \ Test \ Case1 \ ~ $ Case1.xlsx', 'E: / Test / Case1 \ ~ $ Case1.xlsx ', "[Errno 2] Нет такого файла или каталога:' C: \\ Workspace \\ Test \\ Case1 \\ ~ $ Case1.xlsx '")]

Это немой полный код, так как у меня есть тысячи строк кода, я просто показываю, как я выполняю свою функцию.

class SaveThread(QtCore.QThread):
    saveSignal = pyqtSignal()
    def __init__(self, parent = None):
        super().__init__(parent)
    def run(self):
        newcase = newcaseList[-1]
        book = xw.Book(r'{0}\Template_VS.xlsx'.format(TemplateDirectory[-1]))
        #do something with excel sheet
        book.save(r'{0}\{1}\{1}.xlsx'.format(SelectedDirectory[-1], newcase))
        self.saveSignal.emit()

class TabPage(QWidget, Ui_Form):########Pulls Ui from another class
    'GUI for stage information - ex. sheet1, 2'

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.pushButton_3.clicked.connect(self.SaveRun)
        self.saveThread = SaveThread()
        self.saveThread.finished.connect(self.moveFolder)
        saveDirectory = []
        appList = []
        newcaseList = ['C:\\Workspace\\']
        InitialDirectory = ['C:\\Workspace\\Test\\']

    def moveFolder(self):
        appList[-1].kill()
        newcase = newcaseList[-1]
        shutil.move('{0}\{1}'.format(InitialDirectory[-1], newcase), '{0}/{1}'.format(saveDirectory[-1], newcase)) ### Error occurs here because file isn't done processing.

    def SaveRun(self):
        'Save Run File to directory'
        directory = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
        saveDirectory.append(directory)
        app = xw.App(visible=False)
        appList.append(app)

Я хочу, чтобы он дождался полной обработки листа Excel, прежде чем он переместится, как это сделать?Я уверен, что он делает это без метода time.sleep?

...