word 问题

wjkjlq 2007-12-25 10:52:25

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
CrnLockWordFile("c:\\aaa.doc","123");
}
//---------------------------------------------------------------------------
void TForm1::CrnLockWordFile(AnsiString strDocFile, AnsiString strPwd)
{
Variant vWordApp, vDoc;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(0, "启动Word出错!",
__FUNC__, MB_OK | MB_ICONERROR);
vWordApp = Unassigned;
return;
}

vWordApp.OlePropertySet("Visible", true);

vDoc = vWordApp.OlePropertyGet("Documents").
OleFunction("Open", strDocFile.c_str());

vDoc = vWordApp.OlePropertyGet("ActiveDocument");

Variant vOptions = vWordApp.OlePropertyGet("Options");
vOptions.OlePropertySet("WarnBeforeSavingPrintingSendingMarkup", false);
vOptions.OlePropertySet("StoreRSIDOnSave", true);
vOptions.OlePropertySet("ShowMarkupOpenSave", true);

vWordApp.OlePropertyGet("Selection")
.OlePropertyGet("Editors").OleFunction("Add", -1); // wdEditorEveryone
try
{
vDoc.OleFunction("Protect",
3, //wdAllowOnlyReading
false, // NoReset:=False,
strPwd.c_str(), // Password,
false, // UseIRM:=False,
true // EnforceStyleLock:=True
);
}
catch(...)
{
MessageBox(0, "有错发生!",
__FUNC__, MB_OK | MB_ICONERROR);
}

vDoc.OleFunction("Save");
vDoc.OleFunction("Close");

vWordApp.OleProcedure("Quit");

vDoc = Unassigned;
vWordApp = Unassigned;

MessageBox(0, "结束!",
__FUNC__, MB_OK | MB_ICONINFORMATION);
}


上面是你写的WORD设置保护



请问如何取消保护?
如何判断这份WORD是否设置了保护?
...全文
185 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjkjlq 2008-01-13
  • 打赏
  • 举报
回复
3Q
ccrun.com 2008-01-13
  • 打赏
  • 举报
回复
至于判断文档是否受保护,我查了查资料,大概可以通过ActiveDocument的ProtectionType属性来判断,如果其值为wdNoProtection(-1),那么就是没有保护。在C++Builder中,可以用类似以下语句:

if(vDoc.OlePropertyGet("ProtectionType") == -1)
ShowMessage("无保护");
else
ShowMessage("有保护");
ccrun.com 2008-01-13
  • 打赏
  • 举报
回复
最近太忙了,所以来的很少。实在不好意思。

// 取消Word文档保护
void CrnUnlockWordFile(String strDocFile, String strPwd)
{
Variant vWordApp, vDoc;

// 启动Word进程
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(0, "启动Word出错!",
__FUNC__, MB_OK | MB_ICONERROR);
vWordApp = Unassigned;
return;
}

// 使其可视,在你的应用中可以关闭,也就是设为false
vWordApp.OlePropertySet("Visible", true);

// 打开指定文档
vDoc = vWordApp.OlePropertyGet("Documents").
OleFunction("Open", strDocFile.c_str());

// 获取当前活动的文档对象
vDoc = vWordApp.OlePropertyGet("ActiveDocument");

// 取消保护
vDoc.OleFunction("Unprotect", strPwd.c_str());

// 文档的一些属性
vDoc.OlePropertySet("ReadOnlyRecommended", false);
vDoc.OlePropertySet("Password", "");
vDoc.OlePropertySet("WritePassword", "");
vDoc.OlePropertySet("RemovePersonalInformation", false);
vDoc.OlePropertySet("RemoveDateAndTime", false);

// 文档选项的一些属性
Variant vOptions = vWordApp.OlePropertyGet("Options");
vOptions.OlePropertySet("WarnBeforeSavingPrintingSendingMarkup", false);
vOptions.OlePropertySet("StoreRSIDOnSave", true);
vOptions.OlePropertySet("ShowMarkupOpenSave", true);

// 保存并关闭文档
vDoc.OleFunction("Save");
vDoc.OleFunction("Close");

// 关闭Word进程
vWordApp.OleProcedure("Quit");

// 清场
vDoc = Unassigned;
vWordApp = Unassigned;

MessageBox(0, "结束!",
__FUNC__, MB_OK | MB_ICONINFORMATION);
}
wjkjlq 2008-01-04
  • 打赏
  • 举报
回复
10天了
wjkjlq 2008-01-01
  • 打赏
  • 举报
回复
都7天了 还没空啊?
wjkjlq 2007-12-28
  • 打赏
  • 举报
回复
妖哥,提问的代码能不能加点注释啊
stherix 2007-12-28
  • 打赏
  • 举报
回复
vDoc.OleFunction("Protect",
-1, //取消保护
false, // NoReset:=False,
strPwd.c_str(), // Password,
false, // UseIRM:=False,
true // EnforceStyleLock:=True
);
stherix 2007-12-28
  • 打赏
  • 举报
回复
{
vDoc.OleFunction("Protect",
3, //wdAllowOnlyReading //尝试改变这里的值吧
false, // NoReset:=False,
strPwd.c_str(), // Password,
false, // UseIRM:=False,
true // EnforceStyleLock:=True
);
}
wjkjlq 2007-12-28
  • 打赏
  • 举报
回复
还没空吗?
ccrun.com 2007-12-26
  • 打赏
  • 举报
回复
收到。晚上给你回复。现在忙。
wjkjlq 2007-12-26
  • 打赏
  • 举报
回复
自己顶下

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧