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

C++ Builder 自動化 Excel 97 產出專業報表

     編輯:關於C++

資料庫應用常需複雜報表,Crystal Reports 等工具雖強大,但面對交叉表、多重報表時開發效率較低。若能直接自動化 Excel,利用其強大的格式化、圖表、樞紐分析功能,將大幅提升報表品質與開發彈性。本文說明如何透過 C++ Builder 4 透過 COM 介面控制 Excel 97(Excel 8.0),實現資料匯出、格式設定與儲存。

Excel 物件模型三層架構

  1. ExcelApplication:代表 Excel 應用程式本身。
  2. ExcelWorkbook:代表目前開啟的活頁簿。
  3. ExcelWorksheet:代表活頁簿內的工作表。

啟動順序必須依序:Application → Workbooks → Worksheets。

實作步驟

1. 匯入類型程式庫

專案 → Import Type Library → 選取 Microsoft Excel 8.0 Object Library(excel8.olb) → 安裝 → 產生 excel_tlb.h。

2. 表單元件佈局

  • Button1:啟動 Excel 並建立工作表
  • Button2:匯出資料庫資料至 Excel
  • Button3:設定儲存格格式
  • Table1:連接 DBDEMOS 範例資料庫 author.db

3. 標頭檔宣告

#include "..\excel_tlb.h"

private:
    TComPtr Application; // Excel 應用程式
    _WorksheetPtr Worksheet;               // 工作表
    _RangePtr FirstCol;                    // 欄位物件
    _RangePtr Range;                       // 範圍物件

4. Button1:啟動 Excel 並建立工作表

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    const int xlWBATWorksheet = -4167; // 僅含一張工作表的活頁簿

    if (!Application)
        Application = CoApplication::Create(); // 建立 COM 連線

    Application->Visible[0] = true;             // 顯示 Excel 視窗
    Application->Workbooks->Add(xlWBATWorksheet); // 建立新活頁簿
    Worksheet = Application->Workbooks->Item[1]->Worksheets->Item[1]; // 取得第一張工作表
    Worksheet->Name = WideString("Database Data"); // 重新命名工作表
}

5. Button2:將 Table1 資料寫入 Excel

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int i, j;
    Table1->DatabaseName = "DBDEMOS";
    Table1->TableName = "author.db";
    Table1->Open();

    // 寫入欄位名稱(第 1 列)
    for (i = 0; i < Table1->FieldCount; i++)
        Worksheet->Cells->Set_Default(1, i+1, Table1->Fields->Fields[i]->FieldName);

    // 寫入資料列
    Table1->First();
    j = 2;
    while (!Table1->Eof)
    {
        for (i = 0; i < Table1->FieldCount; i++)
            Worksheet->Cells->Set_Default(j, i+1, Table1->Fields->Fields[i]->AsString);
        Table1->Next();
        j++;
    }
}

6. Button3:設定儲存格格式

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Range = Worksheet->Get_Range("C1:F20"); // 設定操作範圍
    Range->Font->Size = 12;                 // 字型大小
    Range->Columns->Interior->ColorIndex = 3; // 背景色
    Range->Borders->LineStyle = xlContinuous; // 邊框

    FirstCol = Worksheet->Columns->Get_Default(3); // 取得第 3 欄
    FirstCol->ColumnWidth = 25;            // 欄寬
    FirstCol->Font->Bold = true;           // 粗體
    FirstCol->Font->Italic = true;         // 斜體
    FirstCol->Font->Color = clBlue;        // 字色
}

進階應用提示

  • 效能優化:大量寫入時,先關閉螢幕更新 Application->ScreenUpdating = false,寫完再開啟。
  • 公式與圖表:可透過 Range->Formula 寫入 Excel 公式,或用 ChartObjects->Add 建立圖表。
  • 另存新檔:Workbook->SaveAs(Filename, xlWorkbookNormal, ..., ..., ..., ...)。
  • 版本相容:Excel 2000+ 類型程式庫為 excel9.olb 等,介面大致相容,僅常數值可能不同。

透過 COM 自動化 Excel,開發者可將報表邏輯與版面設計分離,靈活應對各種複雜報表需求,是 C++ Builder 開發資料庫應用的利器。

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