C#中的Word自动化。在使用SaveAs时出现错误。

3

在尝试使用C#实现Word自动化时,当我尝试保存为文档对象时,出现了以下错误:

System.Runtime.InteropServices.COMException

(0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))

   at Microsoft.Office.Interop.Word.DocumentClass.SaveAs(Object&

FileName, Object& FileFormat, Object& LockComments, Object& Password, Object& AddToRecentFiles, Object& WritePassword, Object& ReadOnlyRecommended, Object& EmbedTrueTypeFonts, Object& SaveNativePictureFormat, Object& SaveFormsData, Object& SaveAsAOCELetter, Object& Encoding, Object& InsertLineBreaks, Object& AllowSubstitutions, Object& LineEnding, Object& AddBiDiMarks)

   at TestWordAutomation.Form1.SaveAs(String

fileName) in D:\dotnet\WordAutomation\TestWordAutomation\TestWordAutomation\Form1.cs:line 246

   at TestWordAutomation.Form1.button4_Click(Object

sender, EventArgs e) in D:\dotnet\WordAutomation\TestWordAutomation\TestWordAutomation\Form1.cs:line 557

我正在这样调用“另存为”方法:Save As
MySaveAs("Doc1.doc");
MySaveAs("Doc2.doc");
MySaveAs("Doc3.doc");

//I have a MySaveAs function
 public void  MySaveAs(string fileName)
        {
            object FileName = null, FileFormat = null, LockComments = null, _Password = null, AddToRecentFiles = null, _WritePassword = null, _ReadOnlyRecommended = null, _EmbedTrueTypeFonts = null, SaveNativePictureFormat = null, _SaveFormsData = null, SaveAsAOCELetter = null, Encoding = null, InsertLineBreaks = null, AllowSubstitutions = null, LineEnding = null, AddBiDiMarks = null;
            FileName = (object) fileName;
            oDoc.SaveAs(ref FileName, ref FileFormat, ref LockComments, ref _Password, ref AddToRecentFiles,
                        ref _WritePassword, ref _ReadOnlyRecommended, ref _EmbedTrueTypeFonts,
                        ref SaveNativePictureFormat, ref _SaveFormsData, ref SaveAsAOCELetter, ref Encoding,
                        ref InsertLineBreaks, ref AllowSubstitutions, ref LineEnding, ref AddBiDiMarks);
        }

有人能帮我解决这个问题吗?

请勿关闭/删除;此问题是开放式SO错误的一部分:http://stackoverflow.uservoice.com/pages/general/suggestions/134204-markdown-bug-with-firefox-3-0-6 - George Stocker
2个回答

8

这很痛苦。我记得用Word/Excel Interop使之工作起来也很困难。不是要轻率,但其中一个参数类型错误了。希望以下内容有所帮助,但我进行了多次此类定义。

static object s_missing = System.Reflection.Missing.Value;
static object s_true = true;
static object s_false = false;
static object s_forcesave = Word.WdSaveOptions.wdSaveChanges;

static Word._Application s_app = null;
...
return s_app.Documents.Open ( ref filename,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing,
   ref s_missing );

设置所有需要的引用缺失参数帮助我摆脱了COM异常。我同意这很让人头疼。 - Larry

2
您不能将null传递给任何interop函数调用 - 使用Missing.Value代替(如Kenny建议的那样)

应该是对 @kenny 回答的评论吗? - slayernoah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接