Я получаю следующую ошибку при попытке реализовать Save as Document Object при попытке реализовать автоматизацию слов на C#:
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(StringfileName) in D:\dotnet\WordAutomation\TestWordAutomation\TestWordAutomation\Form1.cs:line 246
at TestWordAutomation.Form1.button4_Click(Objectsender, 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);
}
Может ли кто-нибудь помочь мне решить эту проблему?





Это больно. Я помню, как это работало с 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 );
Установка всех необходимых параметров ref missing помогла мне избавиться от COMExceptions. Согласен, жжет глаза.
Вы не можете передать null ни в один из вызовов функции взаимодействия - вместо этого используйте Missing.Value (как предлагает Кенни)
Должен быть комментарий к ответу @kenny?
Пожалуйста, не закрывайте / не удаляйте; этот вопрос является частью открытой SO Bug: stackoverflow.uservoice.com/pages/general/suggestions/…