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 文件时出现错误的变量类型错误的主要内容,如果未能解决你的问题,请参考以下文章
TeamDrive(电脑文件同步工具)V4.0.8.1240 官方最新版