資料庫應用常需複雜報表,Crystal Reports 等工具雖強大,但面對交叉表、多重報表時開發效率較低。若能直接自動化 Excel,利用其強大的格式化、圖表、樞紐分析功能,將大幅提升報表品質與開發彈性。本文說明如何透過 C++ Builder 4 透過 COM 介面控制 Excel 97(Excel 8.0),實現資料匯出、格式設定與儲存。
啟動順序必須依序:Application → Workbooks → Worksheets。
專案 → Import Type Library → 選取 Microsoft Excel 8.0 Object Library(excel8.olb) → 安裝 → 產生 excel_tlb.h。
Button1:啟動 Excel 並建立工作表Button2:匯出資料庫資料至 ExcelButton3:設定儲存格格式Table1:連接 DBDEMOS 範例資料庫 author.db#include "..\excel_tlb.h"
private:
TComPtr Application; // Excel 應用程式
_WorksheetPtr Worksheet; // 工作表
_RangePtr FirstCol; // 欄位物件
_RangePtr Range; // 範圍物件
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"); // 重新命名工作表
}
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++;
}
}
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, ..., ..., ..., ...)。excel9.olb 等,介面大致相容,僅常數值可能不同。透過 COM 自動化 Excel,開發者可將報表邏輯與版面設計分離,靈活應對各種複雜報表需求,是 C++ Builder 開發資料庫應用的利器。