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

透過 ODBC 實現 Excel 表格的程式化操作完整指南

     編輯:關於VC++

前言

本文將詳細介紹如何利用 ODBC 技術,將 Excel 試算表視為資料庫來進行讀寫操作。透過封裝良好的 CSpreadSheet 類別,開發者能夠輕鬆實現建立新檔案、寫入與讀取資料、插入/刪除/替換列行儲存格、查詢特定資料,甚至將 Excel 匯出為指定分隔符號的文字檔等功能。文中附有完整的 VC6 範例程式碼與執行畫面示意。

核心架構:ODBC + 類別封裝

基本原理與先前文章《直接通過 ODBC 讀寫 Excel 表格文件》相同:透過 ODBC 驅動程式將 .xls 檔案視為資料來源,藉由 SQL 語句操作資料。關鍵在於「欄位名稱(標題列)必須唯一」,這相當於資料庫的主鍵。本文將所有操作封裝於 CSpreadSheet 類別中,提供直觀的介面並支援擴充。

快速上手:主要功能程式碼範例

1. 引用標頭檔

#include "CSpreadSheet.h"

2. 建立新 Excel 檔案並寫入預設資料

// 指定檔案路徑與工作表名稱
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray sampleArray, testRow;

SS.BeginTransaction();

// 寫入標題列
sampleArray.RemoveAll();
sampleArray.Add("姓名");
sampleArray.Add("年齡");
SS.AddHeaders(sampleArray);

// 批次新增資料列
CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鵬"};
CString strAge[]  = {"27","23","28","27","26"};
for(int i = 0; i < sizeof(strName)/sizeof(CString); i++) {
    sampleArray.RemoveAll();
    sampleArray.Add(strName[i]);
    sampleArray.Add(strAge[i]);
    SS.AddRow(sampleArray);
}

SS.Commit();

3. 讀取 Excel 完整資料

CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Rows;

m_AccessList.ResetContent();
for (int i = 1; i <= SS.GetTotalRows(); i++) {
    SS.ReadRow(Rows, i);
    CString strContents;
    for (int j = 1; j <= Rows.GetSize(); j++) {
        if (j == 1) strContents = Rows.GetAt(j-1);
        else strContents += " --> " + Rows.GetAt(j-1);
    }
    m_AccessList.AddString(strContents);
}

4. 針對現有資料進行新增、插入、替換

// 準備測試資料
for (int k = 1; k <= 2; k++) testRow.Add("Test");

SS.AddRow(testRow);           // 附加至末尾
SS.AddRow(testRow, 2);        // 插入至第 2 列
SS.AddRow(testRow, 6, true);  // 取代第 4 列(參數意義請參考原始碼)
SS.AddCell("徐景周", 1, 2);   // 設定/取代第 2 列第 1 欄儲存格
SS.Commit();

5. 多維度查詢:列、行、單一儲存格

範例展示了完整的 OnQuery() 處理函式,涵蓋四種查詢模式:

  • 指定欄號 → 讀取整欄 ReadColumn()
  • 指定列號 → 讀取整列 ReadRow()
  • 指定列號與欄號 → 讀取單一儲存格 ReadCell()
  • 輸入驗證與錯誤處理(超出範圍、讀取失敗)
// 片段:查詢單一儲存格
if(!SS.ReadCell(tempString, iColumn, iRow)) {
    AfxMessageBox(SS.GetLastError());
    return;
}
CString str;
str.Format("行號: %d, 列號: %d ,內容: %s", iRow, iColumn, tempString);
AfxMessageBox(str);

6. 將 Excel 匯出為分隔符號文字檔

// 以分號分隔,另存為同檔名 .txt
SS.Convert(";");

7. 刪除工作表

SS.DeleteSheet();           // 刪除所有工作表
SS.DeleteSheet("TestSheet");// 刪除指定工作表

8. 取得基本屬性

int iCols = SS.GetTotalColumns();   // 總欄數
int iRows = SS.GetTotalRows();      // 總列數
int iCurRow = SS.GetCurrentRow();   // 目前游標列號

9. 讀取標題列(欄位名稱)

CStringArray rowHeader;
SS.GetFieldNames(rowHeader);
// 迴圈顯示...

深入學習建議

完整實作細節(含交易控制、錯誤處理、邊界條件)請下載隨文提供的原始碼研讀,內含詳細註解。另可參考:

  • 《直接通過 ODBC 讀寫 Excel 表格文件》—— 徐景周 譯
  • A Class to Read and Write to Excel and Text Delimited Spreadsheet —— Yap Chun Wei
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved