用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);
};
{
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);
};
{
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;
{
CSheet sheet;
//打开csv文件
ifstream in("test.csv");
//加载至CSheet
sheet.loadFrom(in);
ifstream in("test.csv");
//加载至CSheet
sheet.loadFrom(in);
//打开转存到的目标文件txt
ofstream out("test.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);
{
_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;
}
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 | 设置给定索引处的值,如果必要的话可以增长数组 |
Add | 在数组的末尾添加一个元素;可根据需要增长数组 |
Append | 向数组中添加另一个数组;如果必要的话可增长数组 |
Copy | 将另一个数组拷贝到此数组中;如果必要的话可增长数组 |
插入/删除
InsertAt | 在指定索引处插入一个元素(或者是另一个数组中的所有元素) |
RemoveAt | 删除指定索引处的一个元素 |
操作符
operator [] | 设置或获取在指定索引处的元素 |
转载于:https://blog.51cto.com/pingpeace/227743