傳統報表列印/預覽需複雜繪圖邏輯。利用 MSHTML (DHTML) 表格 可在 IE/WebBrowser 控制項中直接渲染豐富報表:支援合併儲存格、HTML 格式化、CSS 樣式、客戶端列印。本元件以 C++ 類別封裝常用操作,隔離 COM 介面細節。
class CDHtmlTable {
public:
// 設定索引欄顯示格式 (sprintf 風格)
void SetIndexFormat(CString strFormat);
// 合併儲存格
BOOL MergeCol(int iCol); // 垂直合併相同內容
BOOL MergeRow(int iRow); // 水平合併相同內容
// 列操作
BOOL DeleteRow(int index);
BOOL InsertRow(int index); // -1 = append
// 儲存格內容 (支援 HTML)
BOOL SetItemHTML(int iRow, int iCol, CString html);
// 綁定文件
void SetTableName(CString name); // HTML 中
void SetHtmlDocPtr(IHTMLDocument2* pDoc); // WebBrowser.Document
};
使用流程
- 對話框/視圖放入
CWebBrowser2 (或 CHtmlView)
- 載入含
<table id="ReportTable"></table> 的 HTML 模板
pTable->SetHtmlDocPtr(pDoc); pTable->SetTableName("ReportTable");
- 呼叫上述方法建構報表
- 使用者可直接列印/另存/複製
實作關鍵點
- 透過
IHTMLTable/IHTMLTableRow/IHTMLTableCell COM 介面操作 DOM
MergeCol/Row 邏輯:遍歷儲存格比較 innerText,相同則 rowSpan/colSpan 遞增並隱藏後續儲存格
SetItemHTML 直接設定 innerHTML,支援 <b>/<font color> 等標籤
- 索引欄自動編號:
SetIndexFormat("%03d") → 001, 002...
介面預覽

表格支援跨欄/跨列標題、資料列交替底色、超連結儲存格、即時編輯。
擴充建議
- 匯出 Excel:遍歷 DOM 寫入 CSV 或自動化 Excel
- 排序/篩選:注入 JavaScript DataTables 庫
- 固定表頭捲動:CSS
position: sticky + thead
- 支援
contentEditable 就地編輯回寫資料庫
原始碼開放修改/傳播,適合快速整合至既有 MFC/Win32 專案。
Copyright © 程式碼之家 All Rights Reserved