首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

C++ 封裝 DHTML 表格操作元件:報表輸出的輕量級方案

     編輯:關於VC++

動機與定位

傳統報表列印/預覽需複雜繪圖邏輯。利用 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
};

使用流程

  1. 對話框/視圖放入 CWebBrowser2 (或 CHtmlView)
  2. 載入含 <table id="ReportTable"></table> 的 HTML 模板
  3. pTable->SetHtmlDocPtr(pDoc); pTable->SetTableName("ReportTable");
  4. 呼叫上述方法建構報表
  5. 使用者可直接列印/另存/複製

實作關鍵點

  • 透過 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 專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved