用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 设置给定索引处的值,如果必要的话可以增长数组
Add 在数组的末尾添加一个元素;可根据需要增长数组
Append 向数组中添加另一个数组;如果必要的话可增长数组
Copy 将另一个数组拷贝到此数组中;如果必要的话可增长数组

插入/删除
InsertAt 在指定索引处插入一个元素(或者是另一个数组中的所有元素)
RemoveAt 删除指定索引处的一个元素

操作符
operator [] 设置或获取在指定索引处的元素