以下是我的代码,但密码未删除。当我手动打开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);
        }
    }
}

最佳答案

看起来,设置Password属性实际上并未将文档标记为脏文档,因此不会保存该文档。我浏览了一下文档,看是否有一个强制将其保存为“反省/使其变脏”的选项。尽管我隐约记得在Word Automation Model的早期版本中存在这种选项,但我找不到。

因此,我想出了一个小技巧,可以对文档进行少量更改,但同时也要删除该更改。

// 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,但是您需要写入一个临时文件,然后关闭并正确释放,以便不再锁定原始文件,删除原始文件并将该临时文件移动到原始文件。感觉可行,好像有更多的失败案例。

关于c# - 如何在C#中使用Interop删除Word密码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45390445/

10-16 09:00
查看更多