C++ Builder 封裝 Word 97 自動化介面為 Variant 型別操作:
OlePropertyGet(propname)、OlePropertySet(propname, value)OleProcedure(procName, args...)、OleFunction(funcName, args...)(可回傳子物件)鏈式呼叫範例:子物件 = 父物件.OleFunction("Method", arg)。
Word.Application 與 Word.Basic 兩大根物件,透過 Application.WordBasic 互轉。Documents、Paragraphs、Shapes。CreateOleObject("Word.Application") 或 GetActiveOleObject(...)。TOpenDialog(篩選 Word/位圖)、TMemo(輸入文字)、數個 TButton、TLabel。Variant __fastcall TForm1::GetWordObject() {
Variant Obj1; AnsiString AppName = "Word.Application";
HWND hPrevApp = ::FindWindow(NULL, "Microsoft Word");
if (!hPrevApp) Obj1 = CreateOleObject(AppName);
else Obj1 = GetActiveOleObject(AppName);
Obj1.OlePropertySet("Visible", true);
return Obj1;
}
void __fastcall TForm1::Button1Click(TObject *Sender) {
V = GetWordObject();
Vdocuments = V.OleFunction("Documents");
if (OpenDialog1->Execute())
Vdocument1 = Vdocuments.OleFunction("Open", OpenDialog1->FileName);
int pages = Vdocument1.OleFunction("ComputeStatistics", 2);
Label1->Caption = "檔案 " + Vdocument1.OlePropertyGet("Name") + " 頁數:" + IntToStr(pages);
}
void __fastcall TForm1::Button3Click(TObject *Sender) {
Vactive = V.OleFunction("ActiveDocument");
int paras = Vactive.OleFunction("ComputeStatistics", 4);
Vactive.OleFunction("Paragraphs").OleFunction("Add"); // 新增段落
Add(paras + tag); // 寫入文字
tag++;
}
void __fastcall TForm1::Add(int i) {
Variant 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.OlePropertySet("Text", Memo1->Text);
}
void __fastcall TForm1::Button5Click(TObject *Sender) {
Variant Vshape = Vactive1.OleFunction("Shapes");
Vshape.OleFunction("AddLine", 90, 80, 400, 80); // 畫直線
if (OpenDialog1->Execute())
Vshape.OleFunction("AddPicture", OpenDialog1->FileName, 50, 50, 80, 100); // 插入圖片
}
必須先透過 Button1 開啟/建立文件(取得 Vdocument),才能進行後續編輯、繪圖操作。