以只读模式打开word文档
Open word document in readonly mode
我正在使用自动化功能在 Word 中打开文档。有时我需要以阅读模式打开文档:
var
WordDocument: _Document;
WA: TWordApplication;
begin
WA := TWordApplication.Create( nil );
WA.OnQuit := DocumentClose;
WA.Connect;
WordDocument := Wa.Documents.Open( FileName, EmptyParam, true {ReadOnly}, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam );
但用户可以在打开的文档中关闭阅读模式:
如何在过程 DocumentClose
的 OnQuit
事件中处理这个问题?
DocumentClose
我想知道文档是否处于阅读模式。
我没有任何解决方案,因为我没有足够的经验。
所以,我需要你的建议,关于它的建议。对不起我的英语,如果我需要添加更多信息,请告诉我。谢谢
更新
我试过读取保护类型,但总是 return 第一种情况。因此,当以 ReadOnly 方式打开的文档不受 wdAllowOnlyReading 保护时。有些文件可以用密码保护,但没有问题。
const
wdAllowOnlyReading: Longword = [=11=]000003;
wdNoProtection: Longword = $ffffffff;
var
ProtectionType: TOleEnum;
begin
ProtectionType := WordDocument.ProtectionType;
case ProtectionType of
wdNoProtection : Showmessage('NoProtection');
wdAllowOnlyReading: Showmessage('ReadOnly');
end;
end;
我不确定你所说的"ReadOnly"是什么意思。
WordDocument 有一个 ReadOnly
布尔值 属性,它是只读的,您可以读取它的值但不能设置它。这 属性 returns 如果打开文档时它已经打开,则为真在不同的工作站上,这样用户会收到提示 "This document is locked for editing ..." 并询问是否以只读模式打开文档,或者 Word 是否应该打开副本。
Word 文档可能 "read only" 的另一种意义是,如果用户通过单击 Word 按钮(指向文件菜单等)将其标记为 "Final" 并转到Prepare | Mark as Final
(在 "Ribbon" 版本的 MS Word 中)。
要在代码中读取这些属性,您可以执行例如
if WordDoc.Final then
Caption := 'Final'
else
Caption := 'not Final';
if WordDoc.ReadOnly then
Caption := Caption + ' Read only'
else
Caption := Caption + ' Read/write'
注意: Final
属性 没有出现在 Delphi 的 Word2000.Pas 中,所以要使用它你需要从早期绑定到后期绑定,像这样:
var vWordDoc : OleVariant;
[...]
vWordDoc := WordDoc;
if vWordDoc.Final then
[...]
与 ReadOnly
属性 不同,您可以通过
简单地切换 Final
属性
WordDoc.Final := not WordDoc.Final
但是当WordDoc.ReadOnly
是True
的时候你能不能做到这一点取决于为什么WordDoc.ReadOnly
是True
。
如果 WordDoc.ReadOnly
是 True
因为文档在打开时被编辑锁定,因为它已经在另一个工作站上打开,WordDoc.Final
是只读的。 Otoh,如果它是 True
因为你在调用 .Open() 时指定了 ReadOnly
,那么你需要注意:然后你可以将 Final
设置为 False
并且然后用户将能够编辑该文档,尽管它已被打开 ReadOnly
!
另一个复杂的问题是 ProtectionType
与 "ReadOnly" 没有直接关系,正如我想你已经收集到的那样:它 可以 ,但不一定要防止对文档的某些区域进行编辑。
我正在使用自动化功能在 Word 中打开文档。有时我需要以阅读模式打开文档:
var
WordDocument: _Document;
WA: TWordApplication;
begin
WA := TWordApplication.Create( nil );
WA.OnQuit := DocumentClose;
WA.Connect;
WordDocument := Wa.Documents.Open( FileName, EmptyParam, true {ReadOnly}, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam );
但用户可以在打开的文档中关闭阅读模式:
如何在过程 DocumentClose
的 OnQuit
事件中处理这个问题?
DocumentClose
我想知道文档是否处于阅读模式。
我没有任何解决方案,因为我没有足够的经验。 所以,我需要你的建议,关于它的建议。对不起我的英语,如果我需要添加更多信息,请告诉我。谢谢
更新
我试过读取保护类型,但总是 return 第一种情况。因此,当以 ReadOnly 方式打开的文档不受 wdAllowOnlyReading 保护时。有些文件可以用密码保护,但没有问题。
const
wdAllowOnlyReading: Longword = [=11=]000003;
wdNoProtection: Longword = $ffffffff;
var
ProtectionType: TOleEnum;
begin
ProtectionType := WordDocument.ProtectionType;
case ProtectionType of
wdNoProtection : Showmessage('NoProtection');
wdAllowOnlyReading: Showmessage('ReadOnly');
end;
end;
我不确定你所说的"ReadOnly"是什么意思。
WordDocument 有一个 ReadOnly
布尔值 属性,它是只读的,您可以读取它的值但不能设置它。这 属性 returns 如果打开文档时它已经打开,则为真在不同的工作站上,这样用户会收到提示 "This document is locked for editing ..." 并询问是否以只读模式打开文档,或者 Word 是否应该打开副本。
Word 文档可能 "read only" 的另一种意义是,如果用户通过单击 Word 按钮(指向文件菜单等)将其标记为 "Final" 并转到Prepare | Mark as Final
(在 "Ribbon" 版本的 MS Word 中)。
要在代码中读取这些属性,您可以执行例如
if WordDoc.Final then
Caption := 'Final'
else
Caption := 'not Final';
if WordDoc.ReadOnly then
Caption := Caption + ' Read only'
else
Caption := Caption + ' Read/write'
注意: Final
属性 没有出现在 Delphi 的 Word2000.Pas 中,所以要使用它你需要从早期绑定到后期绑定,像这样:
var vWordDoc : OleVariant;
[...]
vWordDoc := WordDoc;
if vWordDoc.Final then
[...]
与 ReadOnly
属性 不同,您可以通过
Final
属性
WordDoc.Final := not WordDoc.Final
但是当WordDoc.ReadOnly
是True
的时候你能不能做到这一点取决于为什么WordDoc.ReadOnly
是True
。
如果 WordDoc.ReadOnly
是 True
因为文档在打开时被编辑锁定,因为它已经在另一个工作站上打开,WordDoc.Final
是只读的。 Otoh,如果它是 True
因为你在调用 .Open() 时指定了 ReadOnly
,那么你需要注意:然后你可以将 Final
设置为 False
并且然后用户将能够编辑该文档,尽管它已被打开 ReadOnly
!
另一个复杂的问题是 ProtectionType
与 "ReadOnly" 没有直接关系,正如我想你已经收集到的那样:它 可以 ,但不一定要防止对文档的某些区域进行编辑。