Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 通过COM检查Excel中的编译错误_Python 3.x_Excel - Fatal编程技术网

Python 3.x 通过COM检查Excel中的编译错误

Python 3.x 通过COM检查Excel中的编译错误,python-3.x,excel,Python 3.x,Excel,我连接到Excel应用程序,可以使用win32com从Python代码执行“调试”->“编译VBAProject”,就像这样(受以下代码启发): 如果Excel VBA代码中存在编译错误,我会在Excel中收到一条弹出消息,告诉我该错误没有问题。 现在,我想从Python代码中检查是否存在编译错误,如果存在,则引发异常。我不一定需要编译错误作为异常的一部分,但如果可能的话,我当然也很乐意接受。 这能以某种方式做到吗? 在编译前后,我一直在尝试各种各样的窗口计数等,但到目前为止,还没有发现任何对象

我连接到Excel应用程序,可以使用win32com从Python代码执行“调试”->“编译VBAProject”,就像这样(受以下代码启发):

如果Excel VBA代码中存在编译错误,我会在Excel中收到一条弹出消息,告诉我该错误没有问题。

现在,我想从Python代码中检查是否存在编译错误,如果存在,则引发异常。我不一定需要编译错误作为异常的一部分,但如果可能的话,我当然也很乐意接受。
这能以某种方式做到吗?

在编译前后,我一直在尝试各种各样的窗口计数等,但到目前为止,还没有发现任何对象的属性表明存在弹出窗口或编译错误。

好的,我找到了一种有点难看但可行的方法-我想为其他有同样问题的人提供文档: 您需要将代码文件导入已(至少)定义了一个函数的已打开Excel文件中。然后可以从Python代码中调用此函数并捕获任何异常。如果出现异常,则代码(包括导入的文件)未编译,如果没有异常,则编译通过

这是我的代码:
编译_code.bas

Python文件

从win32com导入客户端
def编译(自)->bool:
self.\uu excel=client.GetActiveObject(“excel.Application”)
self.\u book=self.\u excel.ActiveWorkbook
self.\uu book.VBProject.VBComponents.Import()
尝试:
self.\uu excel.Application.Run(“编译代码”)
#如果您到达这里,代码将被编译
返回真值
除例外情况外:
返回错误
from win32com import client

def compile(self):
    self.__excel = client.GetActiveObject("Excel.Application")
    compile_button = self.__excel.VBE.CommandBars.FindControl(1, 578)
    compile_button.Execute()
Public Sub compileCode()
    ' doesn't need to do anything, it just needs to be available!
End Sub
from win32com import client

def compile(self) -> bool:
    self.__excel = client.GetActiveObject("Excel.Application")
    self.__book = self.__excel.ActiveWorkbook
    self.__book.VBProject.VBComponents.Import(<Path_to_compile_code.bas>)
    try:
        self.__excel.Application.Run("compileCode")
        # if you reach here the code compiled
        return True
    except Exception:
        return False