使用xlwings处理数据后,移动文件夹时出错

时间:2019-05-16 14:54:21

标签: python-3.x qthread shutil xlwings file-move

我的程序复制一个excel模板,用xlwings编辑它,并且在处理完成后应移动文件夹。

我正在使用QThread在后台执行此操作,以防止GUI冻结。

当前,我在移动文件时遇到严重错误,因为文件在移动之前尚未完全完成处理。我知道这一点,因为在我再次尝试保存按钮之后,它将完成所需的操作。

我尝试使用时间方法休眠几秒钟,直到过程完成为止,但这花费的时间太长。

错误:

  • 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方法呢?

0 个答案:

没有答案