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

C++ 讀取 Excel 表格數據實戰:CSV 中轉 + CStringArray 解析

     編輯:關於C語言

前言

C++ 直接操作 Excel (COM/OLE Automation) 複雜且依賴 Office 安裝。工程通用做法:**Excel → 另存為 CSV → C++ 解析 CSV**。本文介紹基於 MFC CStringArray 的輕量級 CSV 讀取方案。

核心類設計

CRow:單行數據封裝

class CRow {
private:
    CStringArray *_row;
public:
    CRow(CStringArray *row);
    int GetColumnCount() const;
    CString GetColumn(int i) const;
};

CSheet:整張表數據容器

class CSheet {
private:
    CTypedPtrArray _rows;
public:
    CSheet();
    ~CSheet();
    int LoadFrom(std::ifstream &in);  // 從 CSV 流載入
    int GetRowCount() const;
    CRow GetRow(int i) const;
};

使用範例

int main() {
    CSheet sheet;
    std::ifstream in("test.csv");
    sheet.LoadFrom(in);

    std::ofstream out("test.txt");
    for (int i = 0; i < sheet.GetRowCount(); ++i) {
        CRow row = sheet.GetRow(i);
        for (int j = 0; j < row.GetColumnCount(); ++j) {
            CString s = row.GetColumn(j);
            out << (LPCTSTR)s << "\t";  // 輸出到 TXT
        }
        out << "\n";
    }
    in.close(); out.close();
    return 0;
}

關鍵實現細節

  • LoadFrom():逐行讀取 CSV,以逗號分割字段,處理引號包裹、逗號轉義等 CSV 規範
  • CStringArray:MFC 動態字串陣列,支援 Add()、GetAt()、operator[] 等操作
  • CTypedPtrArray:型別安全的指標陣列模板,管理 CStringArray* 列表

CStringArray 核心成員速查

優缺點評估

  • ✅ 輕量、無外部依賴、MFC 專案零成本集成
  • ✅ CSV 格式通用,支援 Excel、資料庫、文本編輯器互通
  • ❌ 不支援 Excel 公式、樣式、多工作表等高級特性
  • ❌ 需手動處理 CSV 邊界情況(換行符、引號嵌套等)

完整實現參考《把脈 VC++》書籍範例。本文出自「ClickFuture」博客。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
分類方法說明
構造/大小CStringArray()構造空陣列
GetSize()獲取元素數
SetSize()設定元素數
元素訪問GetAt()按索引取值
SetAt()按索引設值
ElementAt()取元素指標引用
GetData()取內部緩衝區指標
增刪改Add()尾部新增
InsertAt()指定位置插入
RemoveAt()刪除指定索引
RemoveAll()清空陣列
FreeExtra()釋放額外預留記憶體
運算子operator[]下標訪問(可左右值)