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