用C++读取EXCEL表格内容是一件很麻烦的事,今天看了《把脉VC++》里面提到了用 CStringArray 读取EXCEL表格内容,确实不错。
主要是先将EXCEL转存成CSV格式(这种格式经常用来作为不同程序之间数据交互的格式)。
然后用C++程序读取CSV。
主要包括两个类:
class CRow
{
private:
CStringArray * _row;
public:
CRow(CStringArray * row);
int getColumnCount(void);
CString getColumn(int i);
};
class CSheet
{
private:
CTypedPtrArray<CPtrArray, CStringArray *> _rows;
public:
CSheet(void);
~CSheet(void);
int loadFrom(ifstream & in);
int getRowCount(void);
CRow getRow(int i);
};
具体方法参照《把脉VC++》
demo:
int main()
{
CSheet sheet;
//打开csv文件
ifstream in("test.csv");
//加载至CSheet
sheet.loadFrom(in);
//打开转存到的目标文件txt
ofstream out("test.txt");
char* sTmp = new char[100];
for(int i = 0; i < sheet.getRowCount(); i++)
{
_tprintf(_T("[%02d] "), i);
//获取指定行
CRow row = sheet.getRow(i);
for(int j = 0; j < row.getColumnCount(); j++)
{
//获取指定列
CString s = row.getColumn(j);
_tprintf(_T("%s "), s);
//把CString 类型转成char*类型
sprintf(sPane,_T("%s "),s);
//保存在TXT文件中
//cout<<"\n"<<sTmp<<endl;
out<<sPane<<"\t";
}
_tprintf(_T("\r\n"), i);
out<<"\n";
}
out.close();
in.close();
return 0;
}
CStringArray类成员

构造 CStringArray 构造一个空的CString对象数组
绑定 GetSize 获取这个数组中的元素数目 SetSize 设置这个数组中包含的元素数目 GetUpperBound 返回最大的有效索引
操作符 FreeExtra 释放当前数组边界之外的未使用的所有内存 RemoveAll 从数组中删除所有元素
元素访问 GetAt 返回位于给定索引处的值 SetAt 设置给定索引处的元素的值;不得将数组增大 ElementAt 返回对数组中的某一元素指针的临时引用 GetData 对数组中的元素允许的访问。可以是NULL
扩大数组 SetAtGrow 设置给定索引处的值,如果必要的话可以增长数组 在数组的末尾添加一个元素;可根据需要增长数组 Append 向数组中添加另一个数组;如果必要的话可增长数组 将另一个数组拷贝到此数组中;如果必要的话可增长数组
插入/删除 InsertAt 在指定索引处插入一个元素(或者是另一个数组中的所有元素) RemoveAt 删除指定索引处的一个元素
操作符 operator [] 设置或获取在指定索引处的元素