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

时间:2008-11-18 12:05:29

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

尝试在C#中实现单词自动化时尝试Save as Document Object时出现以下错误:

System.Runtime.InteropServices.COMException
     

(0x80020005):类型不匹配。   (来自HRESULT的例外:0x80020005   (DISP_E_TYPEMISMATCH))

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

FileName,Object& FileFormat,Object&   LockComments,Object&密码,   对象和放大器; AddToRecentFiles,Object&   WritePassword,Object&   ReadOnlyRecommended,Object&   EmbedTrueTypeFonts,Object&   SaveNativePictureFormat,Object&   SaveFormsData,Object&   SaveAsAOCELetter,Object&编码,   对象和放大器; InsertLineBreaks,Object&   AllowSubstitutions,Object&   LineEnding,Object& AddBiDiMarks)

   at TestWordAutomation.Form1.SaveAs(String
     

fileName)in   d:\ DOTNET \ WordAutomation \ TestWordAutomation \ TestWordAutomation \ Form1.cs中:行   246

   at TestWordAutomation.Form1.button4_Click(Object
     

发件人,EventArgs e)in   d:\ DOTNET \ WordAutomation \ TestWordAutomation \ TestWordAutomation \ Form1.cs中:行   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);
        }

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:2)

你不能将null传递给任何一个互操作函数调用 - 改为使用Missing.Value(由Kenny建议)