尝试在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);
}
任何人都可以帮我解决这个问题吗?
答案 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建议)