我有一个Visual Studio项目,它读取Word文件,进行一些处理,然后将其保存为PDF文件。代码在我的机器上完美运行,该机器只安装了Office 2010,但是当我在安装了Office 2003和Office 2010的另一台PC上运行它时,Document.SaveAs2()会抛出以下异常。
System.Runtime.InteropServices.
COMException (0x80020003): Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
at Microsoft.Office.Interop.Word.DocumentClass.SaveAs2(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, Object& CompatibilityMode)
代码段位于
之下object oMissing = System.Reflection.Missing.Value;
//Creates the needed objects (the application and the document)
Word._Application oWord = null;
Word._Document oDoc = null;
//Checks to see if the file does not exist (which would throw an error)
if (!System.IO.File.Exists(templatePath))
{
_log.DebugFormat("The template file {0} does not exist on the path specified.", templatePath);
throw new FileNotFoundException("The template file does not exist on the path specified.", templatePath);
}
try
{
//Start up Microsoft Word
oWord = new Word.Application();
//If set to false, all work will be done in the background
//Set this to true if you want to see what is going on in
//the system - great for debugging.
oWord.Visible = false;
//Opens the Word Document
//Parameters:
// templatePath = Document Name
// false = Don't convert conversions
// true = Open in Read-only mode
//This may return null on Windows Server 2008 or Windows 7,
//to resolve create a folder by the name of Desktop in the directory
//C:\Windows\SysWOW64\config\systemprofile\Desktop, or
//C:\Windows\System32\config\systemprofile\Desktop
//depending on whether you have 64-bit Windows.
oDoc = oWord.Documents.Open(templatePath, false, true);
//Do some processing
//Export the document to a PDF file, this function requires a default printer to be installed in the system so commenting it out
//oDoc.ExportAsFixedFormat(pdfDocumentPath, Word.WdExportFormat.wdExportFormatPDF);
//Save the word document as a PDF file
oDoc.SaveAs2(pdfDocumentPath, Word.WdSaveFormat.wdFormatPDF);
}
答案 0 :(得分:2)
在一台计算机上安装两个版本的Office是一个非常值得怀疑的做法。特别是不能正常工作的是自动化界面。每个版本的Office都对Application和Document等核心接口使用相同的Guids。但是COM接口的注册是全局的,整个机器上只能有一个接口实现。
这显然在这里出了什么问题。您正在与Office 2003进行通信,而不是2010.它没有Document.SaveAs2()方法。
您需要通过卸载2003和2010以及重新安装2010来解决此问题。或者避免使用2003年不可用的方法。