Document.SaveAs2()提供COMException(0x80020003):安装Office 2003和Office 2010时未找到成员异常

时间:2012-08-31 08:27:00

标签: c# visual-studio-2010 office-interop word-2010 word-2003

我有一个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);
}

1 个答案:

答案 0 :(得分:2)

在一台计算机上安装两个版本的Office是一个非常值得怀疑的做法。特别是不能正常工作的是自动化界面。每个版本的Office都对Application和Document等核心接口使用相同的Guids。但是COM接口的注册是全局的,整个机器上只能有一个接口实现。

这显然在这里出了什么问题。您正在与Office 2003进行通信,而不是2010.它没有Document.SaveAs2()方法。

您需要通过卸载2003和2010以及重新安装2010来解决此问题。或者避免使用2003年不可用的方法。