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() | 構造空陣列 |
GetSize() | 獲取元素數 | |
SetSize() | 設定元素數 | |
| 元素訪問 | GetAt() | 按索引取值 |
SetAt() | 按索引設值 | |
ElementAt() | 取元素指標引用 | |
GetData() | 取內部緩衝區指標 | |
| 增刪改 | Add() | 尾部新增 |
InsertAt() | 指定位置插入 | |
RemoveAt() | 刪除指定索引 | |
RemoveAll() | 清空陣列 | |
FreeExtra() | 釋放額外預留記憶體 | |
| 運算子 | operator[] | 下標訪問(可左右值) |