0

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

1 回答 1

2

在一台机器上安装两个版本的 Office 是一个非常值得怀疑的做法。尤其不能正常工作的是自动化界面。每个版本的 Office 都对应用程序和文档等核心界面使用相同的指南。但是COM接口的注册是全局的,一个接口在整台机器上只能有一个实现。

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

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

于 2012-08-31T11:52:20.863 回答