在企業級專案開發中,客戶常要求將統計資料以固定格式的報表呈現並列印。對於簡單報表,VB 內建報表工具足矣;複雜報表則常採用水晶報表或第三方列印控件。然而,企業內部流通文件多偏好 Excel 或 Word 格式,因其編輯靈活、相容性佳。近期專案需將資料同步輸出至 AutoCAD、Excel 與 Word 三種格式,前兩者網路資源豐富,但 Word 自動化範例較少,且專案需與 AutoCAD 結合,無法採用 OLE 嵌入方式,只能在記憶體中動態生成文件,這對 CPU 資源佔用較大,故採用多執行緒並透過訊息機制通訊。
針對格式固定的區域,務必使用範本機制,可大幅提升執行效能。載入範本的關鍵程式碼如下:
sDocs = sApp.GetDocuments();
sDocs.AttachDispatch(sApp.GetDocuments(), true);
COleVariant vFalse((long)0), vTrue((long)1);
sDoc.AttachDispatch(sDocs.Add(COleVariant(_variant_t(strFileName)), vFalse, vFalse, vTrue));
VBA 錄製巨集時大量使用 Selection 物件,但在 VC++ 中呼叫 MoveUp/MoveDown 易產生不確定行為。建議採取以下策略:
Cell) 或直接操作範本內既有儲存格來填充資料。Rows 集合)歡迎分享。開發流程建議:先在 Word 中錄製巨集完成所需操作(如設定不同頁首/頁尾、取得目前頁碼與總頁數),再將 VBA 代碼轉譯為 VC++ 程式碼。熟悉 Word 物件模型者可事半功倍。
VC++ 同樣可呼叫範本中定義的巨集,範例如下:
VARIANT vtMissing;
vtMissing.vt = VT_ERROR;
vtMissing.scode = DISP_E_PARAMNOTFOUND;
sApp.Run("AddCell", &vtMissing, &vtMissing, &vtMissing,
&vtMissing, &vtMissing, &vtMissing, &vtMissing, &vtMissing,
&vtMissing, &vtMissing, &vtMissing, &vtMissing, &vtMissing,
&vtMissing, &vtMissing, &vtMissing, &vtMissing, &vtMissing,
&vtMissing, &vtMissing, &vtMissing, &vtMissing, &vtMissing,
&vtMissing, &vtMissing, &vtMissing, &vtMissing);
本文拋磚引玉,分享 VC++ 操作 Word 的實戰經驗,期盼同好提供更優雅的解決方案。(VC 知識庫)