用C++Builder實現Word 97自動化 (轉)
用C++Builder實現 97自動化
江西南昌華東交大控制資訊
工程研究所(330013)劉遵雄
----要在應用中控制Word 97的執行,首先必須在編制自動化客戶程式時使其頭中包含檔案ComObj.hpp,寫入#include。工具C++Builder的開發者把Word 97自動化的功能大致包裝成了幾個Ole class,應用人員可以很方便地利用它們。
*設定Ole物件的屬性:
OlePropertyGet(propname)
OlePropertySet(propname,value)
其中value是任何可以轉換為Variant型的值
*呼叫Ole物件的方法:
OleProcedure(OleProcName,[val,...])
OleFunction(OleFuncName,[val,...])
其中val是任何可以轉換為Variant型的值
----可以透過OleFunction(OleFuncName,[val,...])父物件返回其子物件,句法是:子物件名=父物件名. OleFunction(OleFuncName,val)。而且可以對此方法組合從父物件返回其下層物件的物件。
---- C++Builder中使用OLE自動化控制Word 97,必須掌握Word 97的自動化物件及 Word 幫助檔案中關於Word的物件方法和屬性。Word物件代表一個Word的元素,如文件、段落、書籤或單個的字元。集合是一個物件,該物件包含其他數個物件,通常這些物件屬於相同的型別,例如,一個集合物件中可包含文件中的所有書籤物件。透過使用屬性和方法,可以修改單個的物件,也可修改整個的物件集合。屬性是物件的一個特性或者該物件操作的一個方面。例如,文件屬性包含名稱、內容、儲存狀態,以及是否啟用修訂。要更改一個物件的屬性,可以修改屬性的值。方法是物件可以進行的動作。
----代表Word 97應用程式的自動化物件有兩個:Word.Application和Word.Basic,透過Application物件的Worasic屬性可以允許它們之間進行變換賦值。在C++Builder中透過CreateOleObject("…")就可啟動Word並獲得控制程式碼,將其賦給Variant變數。如有兩個Variant型變數V1和V2,WordBasic是Application物件的屬性:
V1=CreateOleObject("Word.Application");
V2=V1.OleFunction("WordBasic")。
----以下透過一個簡單的例子,具體說明如何在C++Builder中實現Word 97的自動化功能,其功能是開啟或建立新文件,並向當前活動中傳送文字、插入點陣圖和畫條直線等。在C++Builder整合開發環境下,建立一專案Project1,其中包含Form1(其Caption為OLE Automation)的單元檔案Unit1.cpp。表單Form1的OpenDialog1物件的Filter設為Word文件或點陣圖。Unit1.cpp的標頭檔案中必須包含"ComObj.hpp"。程式碼如下:
標頭檔案Unit1.h程式碼為:
#ifndef Unit1H
#define Unit1H
//-------------
#include
#include
#include
#include
#include
#include
#include
//-------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton*Button1;
TOpenDialog*OpenDialog1;
TButton*Button2;
TMemo*Memo1;
TBevel*Bevel1;
TButton*Button3;
TLabel*Label1;
TButton*Button5;
TBevel*Bevel2;
TLabel*Label2;
TLabel*Label3;
void __fastcall Button1Click(TObject*Sender);
void __fastcall Button3Click(TObject*Sender);
void __fastcall Button2Click(TObject*Sender);
void __fastcall Button5Click(TObject*Sender);
private:// User declarations
public:// User declarations
Variant V,Vdocuments,Vdocument1,Vdocument2,Vactive;
/*定義Variant型全域性//變數,
分別指代Application物件, V的Documents
物件, Vdocuments的Document物件
(Vdocument1,Vdocument2)以及
V的ActiveDocument物件*/
int tag; //用於記錄Button3被點選的次數
__fastcall TForm1(TComponent*Owner);
Variant __fastcall GetWordObject();
//獲得Word 97自動化物件函式
void __fastcall Add(int i);
//編輯當前活動文件指定的
段落文字的函式
};
//-------------
extern PACKAGE TForm1*Form1;
//-------------
#endif
Unit1.cpp檔案程式碼為:
#include
#pragma hdrstop
#include "Unit1.h"
#include
//-------------
#pragma package(smart_init)
#pragma re "*.dfm"
TForm1*Form1;
//-------------
__fastcall TForm1::TForm1(TComponent*Owner)
: TForm(Owner)
{
tag=1;//令tag的初值為1,
其將隨Button3的點選次數而遞增
}
//-------------
Variant __fastcall TForm1::GetWordObject()
{
Variant Obj1;
AnsiString AppName="Word.Application" ;
HWND hPrevApp = ::FindWindow(NULL,
"Microsoft Word");
if(!hPrevApp)
{
Obj1=CreateOleObject(AppName) ;
//Word沒啟動就啟動它返回一自動化物件
}
else
Obj1=GetActiveOleObject(AppName);
//否則返回正在執行的例項自動化物件
Obj1.OlePropertySet("Visible",true);
return Obj1;
}
void __fastcall TForm1::Button1Click(TObject*Sender)
{
int j;
V=GetWordObject();
//獲得Word 97自動化物件Application
Vdocuments=V.OleFunction("Documents");
//透過Application獲取Documents物件
if (OpenDialog1->Execute())
//使用Documents物件的Open方法
開啟檔案,並返回Document物件
Vdocument1=Vdocuments.OleFunction
("Open",OpenDialog1->FileName);
j=Vdocument1.OleFunction("ComputeStatistics",2);
//計算開啟文件的頁數
Label1->Caption="檔案"+
Vdocument1.OlePropertyGet("Name")
+"頁數是:"+IntToStr(j);
}
//-------------
void __fastcall TForm1::Button3Click(TObject*Sender)
{
int i,j;
i=tag;
Vactive=V.OleFunction("ActiveDocument");
//獲取Application的ActiveDocument物件
j=Vactive.OleFunction("ComputeStatistics",4);
//計算當前文件的段落數
//的的Paragraphs集合物件增加一段
Vactive.OleFunction("Paragraphs").OleFunction("Add");
i=j+i;//當前文件被編輯的段落序號
Add(i);//呼叫編輯當前活動文件
指定的段落文字的函式
Memo1->Clear();//清除Memo1的內容
tag=tag+1;
}
//--------------
void __fastcall TForm1::Button2Click(TObject*Sender)
{
V=GetWordObject();
Vdocuments=V.OleFunction("");
Vdocument2=Vdocuments.OleFunction("Add");
//使用Documents物件的Add方法新建文件
Vdocument2.OlePropertySet("Password","12345");
//設定新建文件的口令
}
//--------------
void __fastcall TForm1::Add(int i)
{
Variant V1;
//設定被編輯段的內容、字型大小、
顏色及是否斜體
V1=((Vactive.OleFunction("Paragraphs")).
OleFunction("Item",i)).OleFunction("Range");
(V1.OleFunction("Font")).OlePropertySet("Italic",true);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
(V1.OleFunction("Font")).OlePropertySet("ColorIndex",6);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
V1.OlePropertySet("Text",Memo1->Text);
}
//-------------
void __fastcall TForm1::Button5Click(TObject*Sender)
{
Variant Vshape,Vactive1,Vline;
Vactive1=V.OleFunction("ActiveDocument");
Vshape=Vactive1.OleFunction("Shapes");
//獲取當前活動文件的Shapes物件
//使用Shapes物件的AddLine方法化直線
Vline=Vshape.OleFunction("AddLine",90,80,400,80);
if (OpenDialog1->Execute())
//使用Shapes物件的AddPicture
方法插入指定點陣圖
Vshape.OleFunction("AddPicture",OpenDialog1
->FileName,50,50,80,100);
}
----此程式在C++Builder 3中編譯透過,執行該應用
程式首先必須獲得文件,然後才可以編輯文件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988972/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用C++Builder 中OLE自動化功能實現呼叫Word進行報表製作 (轉)C++UI
- freemark+dom4j實現自動化word匯出
- Python自動化 | 利用python-docx 實現word操作Python
- 用C++Builder實現工作列圖示動畫效果 (轉)C++UI動畫
- Word中自動更正功能的實用教程
- C++Builder下實現埠讀寫 (轉)C++UI
- Selenium自動化實現web自動化-1Web
- 用 VB 實現表單的自動提交 (轉)
- IT 自動化:如何去實現
- 用 C++BUILDER 實現 POP3 電子郵件的接收 (轉)C++UI
- 用python實現selenium 自動化測試Python
- 用ISAPI方式實現Web頁面的自動更新 (轉)APIWeb
- 用docxtpl庫實現docx報告自動化輸出
- 我用 Python 和 Twilio 實現自動化選課Python
- 用 Python(PyVISA) 實現儀器自動化Python
- iOS如何實現自動化打包iOS
- 使用gulp實現前端自動化前端
- 如何實現辦公自動化?
- saltstack實現自動化擴容
- 使用 fastlane 實現自動化打包AST
- 批次抓圖原來用Word也可實現(轉)
- Word 2007實現自動編排目錄
- 轉轉倉儲自動化系統實踐
- 帶你用 Python 實現自動化群控裝置Python
- 用Python Featuretools庫實現自動化特徵工程(附連結)Python特徵工程
- 是否只有實現了容器化、自動編排等等才算是實現了運維自動化?運維
- CRD實現自動化容器安全方法
- [原] php + Laravel 實現部署自動化PHPLaravel
- 基於RestAssured實現介面自動化REST
- 利用Github Actions實現自動化部署Github
- 如何實現高度自動化測試?
- Postman實現UI自動化測試PostmanUI
- 實現Xcode 9自動化打包XCode
- 自動化報警的實現思路
- 自動化測試平臺設計與實現(二、自動化測試用例物件設計實現、關鍵字物件設計與實現)物件
- pdf轉換成word,非常實用
- Python辦公自動化:效率飛躍,自動化批次彙總Excel到WordPythonExcel
- 通過自動化和現代化實現網路優化優化