1

构建一个函数来评估字符串并返回结果。但是,svc 和 svc2 通​​过一个错误,“Object Not Set”。但是,当我运行代码时,打印语句清楚地表明对象不是 null 或什么都没有,因为它们返回 FALSE。

我错过了什么?

是否有其他测试可以执行以确保 svc 或 svc2 已初始化?

Option VBASupport 1
Option Explicit

Function EVAL (str as String)
    dim svc as object
    dim svc2 as object

    SET svc = createUnoService( "com.sun.star.sheet.FunctionAccess" )
    SET svc2 = GetProcessServiceManager().createInstance("com.sun.star.sheet.FunctionAccess") 

    EVAL = svc2.callFunction ("Evaluate", str)
    EVAL = svc.callFunction ("Evaluate", str)
End Function

我现在收到错误 91,在核心反射调用期间无法强制参数!

注意:正如在对此问题的响应中所指出的,在调用 Evaluate 时,LibreOffice 中存在未解决的错误,因此在 OpenOffice 解决其错误之前,此问题很可能仍未解决。=(

4

1 回答 1

0

这是一个误导性的错误消息。 svcsvc2正确初始化。问题是Evaluate它不能按预期工作。已在https://bugs.documentfoundation.org/show_bug.cgi?id=102076提交了错误报告。

我根本无法让以下示例正常工作。

Option VBASupport 1
Option Explicit

Sub Main()
    Evaluate ("A1:A2") ' Works both on Excel and on LibreOffice
    Evaluate ("TODAY()") ' Works on Excel, but Runtime Error on LibreOffice
End Sub

在http://ooo-forums.apache.org/en/forum/viewtopic.php?f=9&t=3497询问了如何评估字符串。没有任何简单的答案。

编辑

要修复新错误,请使用此代码。

EVAL = svc2.callFunction ("Evaluate", Array(str))

这会产生错误消息com.sun.star.container.NoSuchElementException,我认为这是正确的,因为没有这样的电子表格功能EVALUATE

要验证这一点,请输入=EVALUATE()一个电子表格单元格,该单元格会生成#NAME?.

于 2017-11-07T17:34:25.060 回答