運用VC或Java對Office進行程式設計操作 (轉)
用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用ABAP程式設計實現對微軟Office Word文件的操作程式設計微軟
- [轉載]使用BackgroundWorker元件進行非同步操作程式設計元件非同步程式設計
- 用Delphi進行OpenGL程式設計學習心得 (轉)程式設計
- Java技術:使您輕鬆地進行多執行緒應用程式程式設計(2)(轉)Java執行緒程式設計
- 用C語言技術進行CGI程式設計(轉)C語言程式設計
- VC程式設計中常用快捷鍵 (轉)C程式程式設計
- 對2個hex(16進位制)字串進行異或操作字串
- SQL對資料進行按月統計或對資料進行按星期統計的例項程式碼SQL
- VC++串列埠程式設計之簡訊應用開發(轉)C++串列埠程式設計
- 使用Java客戶端對Redis進行操作Java客戶端Redis
- 對delphi的質疑,一個真正的VC程式設計師的表白 (轉)C程式程式設計師
- VC的另類資料庫程式設計(轉)資料庫程式設計
- 關於VC中的DLL的程式設計 (轉)程式設計
- 快速使用 vscode 進行 Java 程式設計VSCodeJava程式設計
- [java設計模式]單例設計模式,程式也要進行計劃生育。Java設計模式單例
- 好程式設計師教程分享Java註解和運用註解程式設計程式設計師Java
- 在 Oracle JDeveloper 中進行 Ajax 程式設計(轉)OracleDeveloper程式設計
- 對目錄進行操作
- 使用Java 9 Flow進行響應式程式設計Java程式設計
- Java多執行緒程式設計——進階篇一Java執行緒程式設計
- Java多執行緒程式設計——進階篇二Java執行緒程式設計
- 用java進行物件導向程式設計,物件導向是什麼意思Java物件程式設計
- 利用VC++程式設計實現程式自動啟動 (轉)C++程式設計
- Java多執行緒程式設計入門(轉)Java執行緒程式設計
- 用VC++編寫CGI程式 (轉)C++
- VC開發應用程式答疑 (轉)
- 針對Excel表格檔案操作的程式設計實現 (轉)Excel程式設計
- Linux程式設計入門 - zlib的運用(轉)Linux程式設計
- 結對程式設計-四則運算程式設計
- Vector在Java程式設計中的應用 (轉)Java程式設計
- Java桌面應用程式設計:SWT 簡介(轉)Java程式設計
- Java併發程式設計之Java CAS操作Java程式設計
- 一段對16進位制字串進行異或的程式碼字串
- 利用kvo對集合進行操作
- java執行緒程式設計(一):執行緒基礎(轉)Java執行緒程式設計
- 深入淺出Java多執行緒程式設計(轉)Java執行緒程式設計
- 使用VC++6.0 進行圖形介面設計部分控制程式碼的使用方法C++
- shell程式設計Bash中對變數的操作方法談(轉)程式設計變數