Автоматизация слов в C #. Ошибка при использовании SaveAs - PullRequest
3 голосов
/ 18 ноября 2008

Я получаю следующую ошибку при попытке Save as Document Object при попытке реализовать автоматизацию слова в C #:

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, Объект & Читать только рекомендуется, Объект & EmbedTrueTypeFonts, Object & SaveNativePictureFormat, Object & SaveFormsData, Object & SaveAsAOCELetter, Объект & Кодировка, Object & InsertLineBreaks, Object & Разрешить замены, объекты и LineEnding, Object & AddBiDiMarks)

   at TestWordAutomation.Form1.SaveAs(String

fileName) в D: \ DotNet \ WordAutomation \ TestWordAutomation \ TestWordAutomation \ Form1.cs: линия 246

   at TestWordAutomation.Form1.button4_Click(Object

отправитель, EventArgs e) в 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 ]

8 голосов
/ 18 ноября 2008

'Это больно. Я помню, как работал с 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 );
2 голосов
/ 12 июля 2009

Вы не можете передать значение null ни в один из вызовов функции взаимодействия - вместо этого используйте Missing.Value (как предложено Кенни)

...