EOLESysError 使用 OpenOffice 创建 pdf 文件时出现错误的变量类型错误

Posted

技术标签:

【中文标题】EOLESysError 使用 OpenOffice 创建 pdf 文件时出现错误的变量类型错误【英文标题】:EOLESysError Bad Variable Type error on creating pdf files with OpenOffice 【发布时间】:2012-06-01 08:12:20 【问题描述】:

我成功地使用了here 讨论的技术,使用 Openoffice 的 ActiveX 创建了 pdf 文件(从 doc 文件)。

最近,使用 smae OO 版本(3.3),代码不再工作,在这一行(请参阅上面链接中的代码):

FilterParams[0] := CreateProperty('FilterName', AnsiString('writer_pdf_Export'));

我收到 EOLESysError "Bad Variable Type"。

你能帮我解决这个问题吗?

【问题讨论】:

我刚刚使用当前版本的 OpenOffice.org 3.4.0 验证了我在您的问题中链接的帖子中的代码,它对我来说很好用。你能包括你当前的代码吗? 你使用哪个 Delphi 版本? 我刚刚在 Delphi 2007 上尝试过。在 Delphi XE2 中我可以看到您所描述的内容。 根据***.com/questions/747427/…,Variants 有问题 【参考方案1】:

看完this question我是这样解决问题的:

function CreateProperty(const AName: AnsiString; const AValue: Variant): Variant;
  begin
    Result := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Result.Name := AName;
    Result.Value := AValue;
  end;

改为

function CreateProperty(const AName: AnsiString; const AValue: Variant): Variant;
  var
    AVal : Variant;
  begin
    Result := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Result.Name := AName;
    AVal := AValue; // this is done to avoid 'Bad Variable Type'
    Result.Value := AVal;
  end;

您也可以通过在AValue 参数中删除const 来解决它:

function CreateProperty(const AName: AnsiString; AValue: Variant): Variant;
begin
  Result := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Result.Name := AName;
  Result.Value := AValue;
end;

【讨论】:

查看另一种修复方法。我也将我的帖子更新为您在此问题中链接的问题。似乎您无法在 Unicode 版本的 Delphi (?) 中通过常量变量参数传递字符串。我对变体类型了解不多,所以很遗憾,我无法向您解释发生了什么变化以及为什么这在非 Unicode 版本的 Delphi 中有效。

以上是关于EOLESysError 使用 OpenOffice 创建 pdf 文件时出现错误的变量类型错误的主要内容,如果未能解决你的问题,请参考以下文章

IKVM.NET 作为 OpenOffice 的 JRE

TeamDrive(电脑文件同步工具)V4.0.8.1240 官方最新版

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇