運用VC或Java對Office進行程式設計操作 (轉)

gugu99發表於2007-08-16
運用VC或Java對Office進行程式設計操作 (轉)[@more@]

  用VC對進行操作的介紹已經不少了,但是從來沒有把,,進進全面的介紹的。

  由於工作的需要,我需要對在自己的中對word,excel,powerPoint進行操作。所以把自己的體會寫出來和大家分享,希望對大家有所幫助。當然還有很多不當之處,希望大家指出。

  用例子來說明吧,首先建立一個MFC AppWizard(EXE)工程,然後透過在VIEW選單中,選ClassWizard,選Automation選項卡,選Add Class,選擇From a TypeLibrary, 選中 Office 2000 型別庫:Excel9.olb,MSPPT9.OLB,MSWORD9.OLB(在Microsoft OfficeOffice目錄下) 會將型別庫中的所有類新增到你的工程中。

然後寫一個類來操作Office吧!

ObtGuiGcomOfficePrinter .h


#if !defined(AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8A_994B86BACB82__INCLUDED_)
#define AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "comdef.h"
#include "ObtGuiGcomMsWord9.h"
#include "ObtGuiGcomMsPpt9.h"
#include "ObtGuiGcomExcel9.h"

class AFX_EXT_CLASS ObtGuiGcomOfficePrinter 
{
public:
 ObtGuiGcomOfficePrinter();
 virtual ~ObtGuiGcomOfficePrinter();


public:
 BOOL WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);
 BOOL ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);
 BOOL PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);

};

#include "stdafx.h"
#include "ObtGuiGcomOfficePrinter.h"

#ifdef _DE
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ObtGuiGcomOfficePrinter::ObtGuiGcomOfficePrinter()
{

}


ObtGuiGcomOfficePrinter::~ObtGuiGcomOfficePrinter()
{

}

BOOL ObtGuiGcomOfficePrinter::PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
{
 _PptApplication  m_powerpointApp;
 Presentations m_powerpointPres;
 _Presentation m_powerpointPre;

  m_powerpointPres.ReleaseDispatch();
 m_powerpointPre.ReleaseDispatch();
 
 if(!m_powerpointApp.CreateDispatch("PowerPoint.Application"))
 {
 AfxMessageBox("建立PowerPoint服務失敗!");
 return FALSE;
 }
 
 m_powerpointApp.m_bAutoRelease=true;
 m_powerpointApp.SetVisible(TRUE);//對於PowerPoint必須設定為TRUE

 m_powerpointPres.AttachDispatch(m_powerpointApp.GetPresentations());
  m_powerpointPres.Open(lpszFileName,-1,-1,-1);
 m_powerpointPre.AttachDispatch(m_powerpointApp.GetActivePresentation(),TRUE);
 
 m_powerpointPre.PrintOut(-1,-1,"",long(1),-1);
 
  m_powerpointApp.Quit();

 m_powerpointPre.ReleaseDispatch();
 m_powerpointPres.ReleaseDispatch();
 m_powerpointApp.ReleaseDispatch();

 return TRUE;
}
BOOL ObtGuiGcomOfficePrinter::ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
{
 _ExcelApplication  m_excelApp;//定義Excel提供的應用
 Workbooks  m_excelBooks;
 _Workbook  m_excelBook;
 
 m_excelBooks.ReleaseDispatch();
 m_excelBook.ReleaseDispatch();
 m_excelApp.m_bAutoRelease=true;

 建Excel 2000(啟動Excel)
 if (!m_excelApp.CreateDispatch("Excel.Application"))
 {
 AfxMessageBox("建立Excel服務失敗!");
 return FALSE;
 }
 
 m_excelApp.SetVisible(FALSE); 置為隱藏
 用模板建立新文件
 m_excelBooks.AttachDispatch(m_excelApp.GetWorkbooks(),true);
 m_excelBook.AttachDispatch(m_excelBooks.Add(_variant_t(lpszFileName))); 
 
 (lpszActivePrinter); 置當前印表機
 COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//定義印表機並列印
  m_excelBook.PrintOut(covOptional,covOptional,COleVariant(long(1)),covFalse,covOptional,covOptional,covOptional,covOptional);
 
 m_excelApp.Quit();//退出
 
 m_excelBook.ReleaseDispatch();
 m_excelBooks.ReleaseDispatch();
 m_excelApp.ReleaseDispatch();

 return TRUE;
}

BOOL ObtGuiGcomOfficePrinter::WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
{
 
 _WordApplication  m_wordApp;//定義Word提供的應用程式物件
 Documents m_wordDocs;//定義Word提供的文件物件
 _Document m_wordDoc; 前的的文件物件
 
 m_wordDocs.ReleaseDispatch();
 m_wordDoc.ReleaseDispatch();
 m_wordApp.m_bAutoRelease=true;
 
 if(!m_wordApp.CreateDispatch("Word.Application")) 建Word應用服務
 {
 AfxMessageBox("建立Word應用服務失敗!");
 return FALSE;
 }

 m_wordApp.SetVisible(FALSE); 置為隱藏
面是開啟檔案定義VARIANT變數;
 COleVariant varFilePath(lpszFileName);
 COleVariant varstrNull("");
 COleVariant varZero((short)0);
 COleVariant varTrue(short(1),VT_BOOL);
 COleVariant varFalse(short(0),VT_BOOL);

 m_wordDocs.AttachDispatch(m_wordApp.GetDocuments());//將Documents類物件m_Docs和Idispatch介面關聯起來;
 m_wordDocs.Open(varFilePath,varFalse,varFalse,varFalse,varstrNull,varstrNull,varFalse,varstrNull,varstrNull,varTrue,varTrue,varTrue);
 m_wordDoc.AttachDispatch(m_wordApp.GetActiveDocument()); 到當前啟用的Document物件

 m_wordApp.SetActivePrinter(lpszActivePrinter);  置當前印表機
 COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 義列印屬性
 m_wordDoc.PrintOut(covFalse, 
  covOptional, 
  covOptional, 
  covOptional, 
  covOptional, 
  covOptional, 
  covOptional, 
  COleVariant((long)1), 
  covOptional, 
  covOptional, 
  covOptional, 
  covOptional, 
  covOptional, 
  covOptional, 
 covOptional, 
  covOptional, 
  covOptional, 
  covOptional); 
 
 m_wordApp.Quit(covOptional,covOptional,covOptional);//退出

 m_wordDoc.ReleaseDispatch();  開關聯;
 m_wordDocs.ReleaseDispatch();
 m_wordApp.ReleaseDispatch();
 
 return TRUE;

}

以上是用Office開啟相應的文件進行列印的操作,如果你需要進行相應的其他操作,你可以用Office裡面的宏進行錄製然後轉化為相應的程式碼。

對於在裡需要時行Office操作的,你必須用JNI或運用Java-Com的相應包


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章