使用xlwings运行交互式GUI时出现问题

时间:2016-07-26 07:27:32

标签: python xlwings

我已经构建了一个GUI(使用PyQt5),它允许我读取CSV,做了一些基本操作并将其发送到Excel。

然后,我使用xlwings将此GUI集成到Excel中但我遇到了问题。当我使用GUI时,我无法操纵Excel中的数据。我认为这是因为我的宏仍在运行。

有没有办法在不失去Excel控制的情况下运行我的GUI?

def Main():
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

并在Excel中:

Sub GUI()
    RunPython ("import UImainwindow; UImainwindow.Main())
End sub

1 个答案:

答案 0 :(得分:1)

最终我得到了一个解决方案。

我修改ExecuteWindows子以添加如下可选参数:

Sub ExecuteWindows(IsFrozen As Boolean, PythonCommand As String, PYTHON_WIN As String, LOG_FILE As String, SHOW_LOG As Boolean, Optional PYTHONPATH As String, Optional WaitOnReturnBool As Boolean) 

然后我像这样修改RunPython函数

Public Function RunPython(PythonCommand As String, Optional ByVal WaitOnReturnBool As Boolean = True)

ExecuteWindows False, PythonCommand, PYTHON_WIN, LOG_FILE, SHOW_LOG, PYTHONPATH, WaitOnReturnBool

最后用两个参数

调用RunPython函数
RunPython command, WaitOnReturnBool

我必须在我的脚本中使用wb = xw.Workbook.active()而不是wb = xw.Workbook.caller()但它可以工作。 这让我可以在不失去Excel控制权的情况下运行外部GUI。