3

Save as Document ObjectC# でワード オートメーションを実装しようとすると、次のエラーが発生します。

System.Runtime.InteropServices.COMException

(0x80020005): タイプが一致しません。(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) の 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);
        }

これを解決するのを手伝ってくれる人はいますか?

4

2 に答える 2

8

「これは痛い。Word /ExcelInteropでそれを機能させたことを覚えています。派手ではありませんが、パラメータの1つが正しくないタイプです。以下がお役に立てば幸いですが、私はこれらのタイプの定義をいくつか行いました。

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 );
于 2008-11-18T12:21:27.767 に答える
2

相互運用機能の呼び出しにnullを渡すことはできません-代わりにMissing.Valueを使用してください(Kennyの提案による)

于 2009-07-12T19:57:05.333 に答える