報表列印是企業應用核心需求。本文提供一個 COM 元件 YTReport,支援動態加入資料、多種表格樣式 (正表/反表/雙聯表)、標題/尾註/製表人、分頁控制,適合快速整合至 VC++/VB/Delphi 等專案。
// 1. 註冊 COM
regsvr32 YTReport.dll
// 2. stdafx.h 匯入類型庫
#import ".\YTReport.tlb" \
rename_namespace("TestYTReportDriver") \
using namespace TestYTReportDriver;
// 3. App 初始化/釋放 COM 環境
CoInitialize(NULL);
// ...
CoUninitialize();
// 4. 建立介面指標
IYTReportAPtr m_YTPrint;
m_YTPrint.CreateInstance(__uuidof(YTReportA));
if (!m_YTPrint) AfxMessageBox(_T("請先註冊 COM"));
// 5. 程式結束釋放
m_YTPrint.Release();
| 方法 | 用途 | 關鍵參數 |
|---|---|---|
PrePrint | 準備列印 | - |
SetTitleA/B | 主/副標題 | BSTR 文字 |
SetReportHeadA | 正表表頭 | "欄位名|對齊|寬度|..." |
SetReportHeadB | 反表表頭 (統計項) | 欄位名串列, 列寬, 列數 |
SetReportHeadC/D | 反表表頭 (逐列填入) | 列名串列, 列寬, 首列寬 |
AddDetail | 加入明細列 | "值1|值2|..." |
WriteText | 寫入自由文字/數字/註腳 | BSTR |
Print | 輸出列印/預覽 | - |
SetTableNo | 設定表序號 | BSTR |
NewPage | 強制分頁 | - |
DrawDoubleTable | 雙聯表 | 上表名, 下表名 |
SetTableMaker | 製表人 | BSTR |
m_YTPrint->PrePrint();
m_YTPrint->SetTitleA(_T("2024 年度銷售明細表"));
m_YTPrint->SetTitleB(_T("單位:新台幣元"));
// 正表表頭:產品|數量|單價|金額
m_YTPrint->SetReportHeadA(_T("產品名|l|15|數量|r|8|單價|r|10|金額|r|12"));
// 逐筆加入明細
m_YTPrint->AddDetail(_T("筆記型電腦|50|25000|1250000"));
m_YTPrint->AddDetail(_T("滑鼠|200|300|60000"));
// ...
m_YTPrint->SetTableMaker(_T("財務部 張三"));
m_YTPrint->Print(); // 彈出列印預覽/選擇印表機
圖 1:SetReportHeadA - 正表 (橫向欄位)
圖 2:SetReportHeadB - 反表 (統計項為欄)
圖 3:SetReportHeadC - 反表逐列填入
AddDetail。NewPage。完整原始碼 (COM 伺服器 + VC++ 測試客戶端) 可下載,代碼無限制自由使用。