VS2008 對Office2010的自動化操作 word轉pdf

 

// 源文件,類名Converter.cpp

#include "StdAfx.h"

#include "Converter.h"

 

 

CConverter::CConverter(void)

{

}

 

CConverter::~CConverter(void)

{

}

 

//

// Word轉換成PDF

//

//

//

BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, MSWord::WdExportFormat wdExportFormat)

{

 

BOOL result = FALSE;

MSWord::_ApplicationPtr pWdApplicationPtr;

MSWord::_DocumentPtr pWdDocumentPtr;

 

COleVariant sourcePath = strSourcePath;

COleVariant targetPath = strTargetPath;

COleVariant vTrue((short)TRUE);

COleVariant vFalse((short)FALSE);

COleVariant vZero((short)0);

COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

 

CoInitialize(NULL);

try

{

HRESULT hResult = pWdApplicationPtr.CreateInstance("Word.Application");

if (hResult != S_OK)

{

AfxMessageBox(_T("Application創建失敗,請確保安裝了word 2000或以上版本!"), MB_OK|MB_ICONWARNING);

CoUninitialize();

return result;

}

pWdDocumentPtr = pWdApplicationPtr->Documents->Open(sourcePath, 

vTrue, // Confirm Conversion.

vFalse, // ReadOnly.

vFalse, // AddToRecentFiles.

vOptional, // PasswordDocument.

vOptional, // PasswordTemplate.

vOptional, // Revert.

vOptional, // WritePasswordDocument.

vOptional, // WritePasswordTemplate.

vOptional, // Format. // Last argument for Word 97

vOptional, // Encoding // New for Word 2000/2002

vFalse, // visible

vOptional, // openAndRepair

vZero, // docDirection

vOptional, // NoEncodingDialog

vOptional);

//pWdDocumentPtr = pWdApplicationPtr->Documents->Open2000(sourcePath, 

// vTrue, // Confirm Conversion.

// vFalse, // ReadOnly.

// vFalse, // AddToRecentFiles.

// vOptional, // PasswordDocument.

// vOptional, // PasswordTemplate.

// vOptional, // Revert.

// vOptional, // WritePasswordDocument.

// vOptional, // WritePasswordTemplate.

// vOptional, // Format. // Last argument for Word 97

// vOptional, // Encoding // New for Word 2000/2002

// vOptional); // Visible

 

if(pWdDocumentPtr == NULL)

{

CoUninitialize();

return result;

}

hResult = pWdDocumentPtr->ExportAsFixedFormat((_bstr_t )strTargetPath, // target path

wdExportFormat, // export format

FALSE, // Open After Export

wdExportOptimizeForPrint, // Export OptimizeFor

wdExportAllDocument, // Export Range

0, // start page

0, // end page

wdExportDocumentContent, // Export Item

TRUE, // Include Doc Props

TRUE, // Keep IRM

wdExportCreateWordBookmarks, // Export Create Bookmarks

TRUE, // Doc Structure Tags

TRUE, // Bitmap Missing Fonts

FALSE); // Use ISO19005_1

if (hResult == S_OK)

{

result = TRUE;

}

}

catch(CException* e)

{

TCHAR   szError[1024];   

e->GetErrorMessage(szError,1024);   //  e.GetErrorMessage(szError,1024); 

AfxMessageBox(_T("WORD文檔轉PDF異常:") + (CString)szError); 

}

if(pWdDocumentPtr != NULL)

{

pWdDocumentPtr->Close();

pWdDocumentPtr = NULL;

}

if(pWdApplicationPtr != NULL)

{

pWdApplicationPtr->Quit();

pWdApplicationPtr = NULL;

}

CoUninitialize();

return result;

}

 

//

// Excel轉PDF

//

BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, MSExcel::XlFixedFormatType targetType)

{

BOOL result = FALSE;

 

MSExcel::_ApplicationPtr pEcApplicationPtr;

MSExcel::_WorkbookPtr pEcWorkbookPtr;

 

COleVariant sourcePath = strSourcePath;

COleVariant targetPath = strTargetPath;

COleVariant vTrue((short)TRUE);

COleVariant vFalse((short)FALSE);

COleVariant vZero((short)0);

COleVariant vTwo((short)2);

COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

 

CoInitialize(NULL);

try

{

HRESULT hResult = pEcApplicationPtr.CreateInstance("Excel.Application");

if (hResult != S_OK)

{

AfxMessageBox(_T("Application創建失敗,請確保安裝了Excel 2000或以上版本!"), MB_OK|MB_ICONWARNING);

CoUninitialize();

return result;

}

pEcWorkbookPtr = pEcApplicationPtr->Workbooks->Open((_bstr_t )strSourcePath);

if(pEcWorkbookPtr == NULL)

{

CoUninitialize();

return result;

}

hResult = pEcWorkbookPtr->ExportAsFixedFormat(targetType, targetPath, xlQualityStandard, vTrue, vFalse); // Use ISO19005_1

if (hResult == S_OK)

{

result = TRUE;

}

}

catch(CException* e)

{

TCHAR   szError[1024];   

e->GetErrorMessage(szError,1024);   //  e.GetErrorMessage(szError,1024); 

AfxMessageBox(_T("EXCEL文檔轉PDF異常:") + (CString)szError); 

}

if(pEcWorkbookPtr != NULL)

{

pEcWorkbookPtr->Close();

pEcWorkbookPtr = NULL;

}

if(pEcApplicationPtr != NULL)

{

pEcApplicationPtr->Quit();

pEcApplicationPtr = NULL;

}

CoUninitialize();

return result;

}

 

//

// PPT轉PDF

//

BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, MSPpt::PpSaveAsFileType targetType)

{

BOOL result = FALSE;

 

MSPpt::_ApplicationPtr pPtApplicationPtr;

MSPpt::_PresentationPtr pPtPresentationPtr;

 

CoInitialize(NULL);

try

{

HRESULT hResult = pPtApplicationPtr.CreateInstance("PowerPoint.Application");

if (hResult != S_OK)

{

AfxMessageBox(_T("Application創建失敗,請確保安裝了PowerPoint 2000或以上版本!"), MB_OK|MB_ICONWARNING);

CoUninitialize();

return result;

}

 

Presentations *pPresentations = NULL;

_Presentation *g_pPresentation = NULL;

 

pPtApplicationPtr->get_Presentations(&pPresentations);

if(pPresentations == NULL)

{

CoUninitialize();

return result;

}

pPtPresentationPtr = pPresentations->Open(_bstr_t(strSourcePath), msoFalse, msoFalse, msoFalse);

if(pPtPresentationPtr == NULL)

{

CoUninitialize();

return result;

}

hResult = pPtPresentationPtr->SaveAs((_bstr_t )strTargetPath, targetType, msoTrue);

if (hResult == S_OK)

{

result = TRUE;

}

}

catch(CException* e)

{

TCHAR   szError[1024];   

e->GetErrorMessage(szError,1024);   //  e.GetErrorMessage(szError,1024); 

AfxMessageBox(_T("PPT文檔轉PDF異常:") + (CString)szError); 

}

if(pPtPresentationPtr != NULL)

{

pPtPresentationPtr->Close();

pPtPresentationPtr = NULL;

}

if(pPtApplicationPtr != NULL)

{

pPtApplicationPtr->Quit();

pPtApplicationPtr = NULL;

}

CoUninitialize();

return result;

}

 

//

// 根據類型轉不同格式的Office文件到PDF

//

BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, FormatType formatType)

{

BOOL result = FALSE;

switch (formatType)

{

case ConvertWord:

result = Convert(strSourcePath, strTargetPath, wdExportFormatPDF);

break;

case ConvertExcel:

result = Convert(strSourcePath, strTargetPath, xlTypePDF);

break;

case ConvertPPT:

result = Convert(strSourcePath, strTargetPath, ppSaveAsPDF);

break;

}

return result;

}

 

 


// 頭文件,類名Converter.h

#pragma once

//#pragma region Import the type libraries

 

#import "C://Program Files//Common Files//Microsoft Shared//OFFICE14//MSO.DLL" /

rename("RGB", "MSORGB") /

rename("DocumentProperties", "MSODocumentProperties")

 

using namespace Office;

 

 

#import "C://Program Files//Common Files//Microsoft Shared//VBA//VBA6//VBE6EXT.OLB"

 

using namespace VBIDE;

 

 

#import "C://Program Files//Microsoft Office//Office14//MSWORD.OLB" rename_namespace("MSWord") /

auto_search /

auto_rename /

no_auto_exclude /

rename("ExitWindows", "WordExitWindows")

#import "C://Program Files//Microsoft Office//Office14//EXCEL.EXE"  rename_namespace("MSExcel") /

rename("DialogBox", "ExcelDialogBox") /

rename("RGB", "ExcelRGB") /

rename("CopyFile", "ExcelCopyFile") /

rename("ReplaceText", "ExcelReplaceText") /

no_auto_exclude

 

#import "C://Program Files//Microsoft Office//OFFICE14//MSPPT.OLB"/

rename_namespace("MSPpt"), auto_rename, auto_search, rename("ExitWindows", "WordExitWindows")

 

#pragma endregion

 

using namespace MSWord;

using namespace MSExcel;

using namespace MSPpt;

 

 

enum FormatType

{

ConvertWord,

ConvertExcel,

ConvertPPT

};

 

 

class CConverter

{

public:

CConverter(void);

~CConverter(void);

static BOOL Convert(CString strSourcePath, CString strTargetPath, MSWord::WdExportFormat wdExportFormat);

static BOOL Convert(CString strSourcePath, CString strTargetPath, MSExcel::XlFixedFormatType targetType);

static BOOL Convert(CString strSourcePath, CString strTargetPath, MSPpt::PpSaveAsFileType targetType);

static BOOL Convert(CString strSourcePath, CString strTargetPath, FormatType formatType);

};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章