密码保护时显示错误OpenXml Word文档在Office 2010中作为受密码保护的二进制Word重新保存

时间:2016-02-25 09:22:09

标签: c# .net ms-word com office-interop

在微软的单词中,我创建了openxml.doc(*。docx)文件,将凭据'abc'作为Readpassword,将'xyz'作为WritePassword。

现在我必须将openxml.doc转换为binary.doc(WdSaveFormat = 0),使用下面的代码将文档作为Binary.doc成功创建

// Convert OpenXml.doc into binary.doc    
Convert(@"C:\Test\OpenXml.doc", @"C:\Test\binary.doc", WdSaveFormat.wdFormatDocument);

// Convert a Word .docx to Word 2003 .doc
public static void Convert(string input, string output, WdSaveFormat format)
{
    // Create an instance of Word.exe
    Word._Application oWord = new Word.Application();

    // Make this instance of word invisible (Can still see it in the taskmgr).
    oWord.Visible = false;

    // Interop requires objects.
    object oMissing = System.Reflection.Missing.Value;
    object isVisible = true;
    object readOnly = false;
    object oInput = input;
    object oOutput = output;
    object oFormat = format;
    object oNewPassword = "xyz";
    object oOldPassword = "abc";
    object test = null;

    try
    {
        // Load a document into our instance of word.exe
        // suppose password "abc"
        Word._Document oDoc = oWord.Documents.Open(ref oInput, ref oMissing,
                                 ref readOnly, ref oMissing, oOldPassword,
                                 ref oMissing, ref oMissing, oNewPassword,
                                 ref oMissing, ref oMissing, ref oMissing,
                                 ref isVisible, ref oMissing, ref oMissing,
                                 ref oMissing, ref oMissing);

        // Make this document the active document.
        oDoc.Activate();

        // Save this document in Word 2003 format.
        oDoc.SaveAs(ref oOutput, ref oFormat, ref oMissing,
                    ref oOldPassword, ref oMissing,
                    oNewPassword, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing);
        Console.WriteLine(test);
        // Always close Word.exe.
        oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
    }
    catch (Exception)
    {
        throw;
    }
}

但是当尝试手动或从代码打开文档时,它接受Readpassword('abc'),如下所示

enter image description here

但是当试图给WritePassword('xyz')时它不接受并显示密码不正确的错误。请查看下面的截图

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

使用您提供的代码,我也无法正确设置读/写密码。似乎Word无法更改保存格式并同时保留读取/保存密码(这可能是一个错误或简单的不支持的方案)。

但是,有一个非常简单的解决方法:只需在没有密码的情况下临时保存文档,然后再次设置密码:

public static void Convert(string input, string output, Word.WdSaveFormat format)
{
    // Create an instance of Word.exe>
    var oWord = new Word.Application();

    // open the protected document
    var oDoc = oWord.Documents.Open(input, PasswordDocument: "abc", WritePasswordDocument: "xyz");

    // save the document without password first
    oDoc.SaveAs(FileName: output, Password: "", WritePassword: "");

    // close and reopen
    oDoc.Close();
    oDoc = oWord.Documents.Open(output);

    // set the password
    oDoc.SaveAs(FileName: output, FileFormat: format, Password: "abc", WritePassword: "xyz");

    oWord.Quit();
}