【问题标题】:LibreOffice CallFunction Object Not SetLibreOffice CallFunction 对象未设置
【发布时间】:2023-03-12 02:30:02
【问题描述】:

构建一个函数来评估字符串并返回结果。但是,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 解决其错误之前仍未解决。 =(

【问题讨论】:

  • 尝试在您的 svc 和 svc2 分配中使用 Set
  • AFAIK,没有真正的好方法来做到这一点。也许提供更多关于您想要做什么的细节会有所帮助,我们可以找到一种不同的解决方案。您的电子表格是什么样的?
  • 仅供参考... E1 = FORMULA (E3) ... 生成公式 ... E3 = C3 - D3 + E2 ...(标准银行余额公式)。我想在哪里使用... E3 = EVALUATE (E1) ... 这样我就可以看到方程式并根据需要进行调整,这就足够了。不是问题的答案,但可能对其他人有所帮助。

标签: vba libreoffice calc openoffice-basic


【解决方案1】:

这是一个误导性的错误消息。 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?

【讨论】:

  • 是的,看起来这个问题在修复错误之前将无法解决。
  • 我用选项行更新了我的代码,并在分配“svc”和“svc2”时使用了“SET”。这有助于摆脱“对象未设置错误”。但是,正如所指出的,Evaluate 方法不起作用。它产生错误 91,“在核心反射调用期间无法强制参数类型”
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多