有没有办法在不重新打开 Excel 文件的情况下用 xlwings 调用 python?
Is there a way to call python with xlwings without reopening the Excel file?
我正在使用 xlwings 从 Excel 呼叫 python。我发现在运行我的宏时,Excel 关闭并重新打开以运行代码。它可以正常运行,但会减慢速度。此外,如果 Excel 文件未保存,则会出现一个对话框,提示该文件已打开,我将丢失未保存的更改。
是否可以在不重新打开 Excel 文件的情况下调用 python?
这是我的 python 代码(在 loaddf.py 中):
from xlwings import Workbook, Range, Sheet
def my_macro():
wb = Workbook.caller()
Range('A1').value = Range('A1').value + 1
我的 Excel 文件中的 VBA 代码:
Sub loaddfsub()
RunPython ("import loaddf; loaddf.my_macro()")
End Sub
感谢您的帮助。
似乎在某些情况下,Excel 没有在 RunningObjectTable
中正确注册 Excel 工作簿,这是可以通过 COM 找到的先决条件。到目前为止,我只注意到从互联网下载的工作簿的这种行为,因为它首先以 Protected View
模式打开它们(取决于设置)。不过根据这里的反馈,好像在其他情况下也会出现这种情况,可能是某些加载项或安全设置引起的。
我已经为此实施了一个修复程序,该修复程序将出现在 v0.3.1
中,但您现在可以直接从 GitHub 中获取它。如果您需要帮助,请告诉我。
更新(2015 年 1 月 16 日):
包含此修复程序的 xlwings v0.3.1 刚刚发布。
Update2(2015 年 9 月 13 日):
xlwings v0.4.0 应该最终以可靠的方式修复了这个错误。
我正在使用 xlwings 从 Excel 呼叫 python。我发现在运行我的宏时,Excel 关闭并重新打开以运行代码。它可以正常运行,但会减慢速度。此外,如果 Excel 文件未保存,则会出现一个对话框,提示该文件已打开,我将丢失未保存的更改。
是否可以在不重新打开 Excel 文件的情况下调用 python?
这是我的 python 代码(在 loaddf.py 中):
from xlwings import Workbook, Range, Sheet
def my_macro():
wb = Workbook.caller()
Range('A1').value = Range('A1').value + 1
我的 Excel 文件中的 VBA 代码:
Sub loaddfsub()
RunPython ("import loaddf; loaddf.my_macro()")
End Sub
感谢您的帮助。
似乎在某些情况下,Excel 没有在 RunningObjectTable
中正确注册 Excel 工作簿,这是可以通过 COM 找到的先决条件。到目前为止,我只注意到从互联网下载的工作簿的这种行为,因为它首先以 Protected View
模式打开它们(取决于设置)。不过根据这里的反馈,好像在其他情况下也会出现这种情况,可能是某些加载项或安全设置引起的。
我已经为此实施了一个修复程序,该修复程序将出现在 v0.3.1
中,但您现在可以直接从 GitHub 中获取它。如果您需要帮助,请告诉我。
更新(2015 年 1 月 16 日): 包含此修复程序的 xlwings v0.3.1 刚刚发布。
Update2(2015 年 9 月 13 日): xlwings v0.4.0 应该最终以可靠的方式修复了这个错误。