LibreOffice CallFunction对象未设置

时间:2017-11-07 15:42:15

标签: vba libreoffice calc openoffice-basic

构建一个函数来评估字符串并返回结果。但是,svc和svc2通过错误“Object Not Set”。但是,当我运行代码时,print语句清楚地表明对象不为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解决其错误之前,此问题很可能仍未得到解决。 =(

1 个答案:

答案 0 :(得分: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?