为了方便操作Excel表格, 写了这个Excel读写类。
部分头文件:
// ExcelSheet.h: interface for the CExcelSheet class.
// Excel 读写类 Copyright 2007
// programmed by shenhai, email: heatonshen@163.com

/**///////////////////////////////////////////////////////////////////////
#if !defined(AFX_EXCELSHEET_H__84984803_14F7_4F6E_AB65_A429CA01D4E5__INCLUDED_)
#define AFX_EXCELSHEET_H__84984803_14F7_4F6E_AB65_A429CA01D4E5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <odbcinst.h>
#include <afxdb.h>
#include <afxcoll.h>

#ifndef EXCELSHEET_API
#define EXCELSHEET_API __declspec(dllexport)
#endif

class EXCELSHEET_API CExcelSheet

...{
public:
//构造函数
CExcelSheet();
virtual ~CExcelSheet();

bool OpenExcel(CString File, CString SheetOrSeparator, bool Backup = false);

inline bool CloseExcel()...{ return true;}
//删除excel中的所有表格
bool DeleteSheet();
//删除excel中指定的表格
bool DeleteSheet(CString SheetName);
bool RollBack();

//取总行数

inline long GetTotalRows() ...{return m_dTotalRows;}
//取总列数

inline short GetTotalColumns() ...{return m_dTotalColumns;}
//取当前所在行数

inline long GetCurrentRow() ...{return m_dCurrentRow;}


//初始化excel缓存
void InitBuffer();
//添加数据方式一
int AddStr(LPCTSTR newElement);
int AddStr(const CString& newElement);
int AddChar(char newElement);
int AddDouble(double newElement);
int AddLong(long newElement);
//添加一行, 缺省尾部添加
bool AppendRecord(long row = 0);
//替换目的行
bool ReplaceRecord(long row);
//添加excel表头
bool AppendHeaders();
//替换excel表头
bool ReplaceHeaders();
//添加数据方式二 , 先要InitBuffer(), add完后再AppendRecord或者ReplaceRecord
//以char*添加
int AddStr(char *fieldname, char *destValue);
//以CString添加
int AddStr(char *fieldname, CString &destValue);
//以char添加
int AddChar(char *fieldname, char destValue);
//以长整型添加
int AddLong(char *fieldname, long destValue);
//以整型添加
int AddInt(char *fieldname, int destValue);
//以double型添加
int AddDouble(char *fieldname, double destValue);


// 返回值为字段的类型
// 读取一行excel数据,缺省读取当前下一行
bool ReadRecord(long row = 0);
// 以char * 返回字段的值
void GetStr(char *fieldname, char *destValue);
// 以CString返回字段的值
void GetStr(char *fieldname, CString &destValue);
// 将字段内容以单字节返回
void GetChar(char *fieldname, char &destValue);
// 以长整型返回
long GetLong(char *fieldname);
// 以整型返回(在windows中和上边一样)
int GetInt(char *fieldname);
// 以double返回字段的值
double GetDouble(char *fieldname);

void BeginTransaction();
inline CString GetLastError()

private:
bool m_bAppend;
bool m_bBackup;
bool m_bExcel;
bool m_bTransaction;

long m_dCurrentRow;
long m_dTotalRows;
short m_dTotalColumns;

CString m_sSql;
CString m_sDsn;
CString m_stempSql;
CString m_stempString;
CString m_sSheetName;
CString m_sExcelDriver;
CString m_sFile;
CString m_sSeparator;
CString m_sLastError;

CStringArray m_ExcelRow;
CStringArray m_ExcelRowforOut;

CStringArray m_atempArray;
CStringArray m_aFieldNames;
CStringArray m_aRows;

CDatabase *m_Database;
CRecordset *m_rSheet;
};

#endif
使用示例:
一,添加数据:
// 新建Excel文件名及路径,SheetTable为内部表名
CExcelSheet ExcelSheet;
ExcelSheet.OpenExcel("c:/ExcelSheet.xls", "SheetTable");
ExcelSheet.BeginTransaction();
// 加入标题
//添加数据前需要先InitBuffer(),创建输入缓存
ExcelSheet.InitBuffer();
ExcelSheet.AddStr("姓名");
ExcelSheet.AddStr("年龄");
ExcelSheet.AddStr("身高");
ExcelSheet.AddStr("收入");
ExcelSheet.AddStr("ab1");
//调用ReplaceHeaders()将输入缓存写入Excel
ExcelSheet.ReplaceHeaders();
// 加入数据
//方法一,按照数据字段顺序添加
ExcelSheet.InitBuffer();
ExcelSheet.AddStr("张三");
ExcelSheet.AddStr("16");
ExcelSheet.AddLong(12345);
ExcelSheet.AddDouble(12.345);
ExcelSheet.AddChar('s');
ExcelSheet.AppendRecord();

//方法二,按照数据字段名称添加
ExcelSheet.InitBuffer();
ExcelSheet.AddLong("身高", 12345);
ExcelSheet.AddDouble("收入", 12.345);
ExcelSheet.AddChar("ab1", 's');
ExcelSheet.AddStr("姓名", "张三");
ExcelSheet.AddStr("年龄", "16");
ExcelSheet.AppendRecord();
二,读取数据
CExcelSheet ExcelSheet;
ExcelSheet.OpenExcel("c:/ExcelSheet.xls", "SheetTable");
//将当前数据行读入输出buffer
ExcelSheet.ReadRecord(i);
CString strContents = "";
char abc[1024];
ExcelSheet.GetStr("姓名", abc);
CString strTemp = "";
int age = ExcelSheet.GetLong("年龄"));
int tall = ExcelSheet.GetInt("身高"));
double income = ExcelSheet.GetDouble("收入"));
char aaa;
ExcelSheet.GetChar("ab1", aaa);
有需要的xdjms可以给我发email索取最新版本的release,当然
有臭虫或者有什么建议也要积极报告:)