以下是我的代码。但密码不会被删除。当我手动打开Word时,密码对话框仍然会弹出。
我也尝试过Unprotect方法,但这也不起作用。
private static void WordUnProtect(string fileName, string password)
{
var app = new Word.Application();
Word.Document doc = null;
try
{
doc = app.Documents.Open(fileName, PasswordDocument: password);
// this doesn't work also
//doc.Unprotect();
doc.Password = string.Empty;
doc.Save();
}
finally
{
if (doc != null)
{
doc.Close(false);
Marshal.ReleaseComObject(doc);
}
if (app != null)
{
app.Quit();
Marshal.ReleaseComObject(app);
}
}
}
答案 0 :(得分:3)
看起来设置Password
属性实际上并未将文档标记为 dirty ,因此不会保存。我已经浏览了文档,看看是否有一个选项可以强制它保存/使其变脏。虽然我模糊地回忆起早期版本的Word自动化模型中存在这样的选项,但我无法找到。
所以我想出了这个小小的黑客来对文档进行一些小改动,同时也删除了这个改变。
// doc IsDirty
doc.Range(0, 0).InsertBefore(" ");
// no more password
doc.Password = null;
// let's remove what was Inserted
doc.Range(0, 1).Text ="";
另一个选项当然是按照MickyD的建议做SaveAs
,但是你需要写一个临时文件,关闭并正确释放,这样原来的文件就不会被锁定,删除原文并将临时文件移动到原始文件。这将有效,感觉它有更多的失败案例。
答案 1 :(得分:0)
操纵/切换doc.saved属性 doc.close之前为真