void CMapgistwoView::ReadOneRowFromExecl(long i, long n, Range m_range,_Worksheet m_sheet, CString *m_str)
{//从EXECL文件中读取指定行的数据
// i—行号
// n—数据列数
// m_str—存放读入的数据
m_range=m_sheet.GetRange(COleVariant(IndexToString(i, 1)),COleVariant(IndexToString(i, int(n))));
if(n<2l)
{
m_str[0]=m_range.GetText().bstrVal;
return;
}
VARIANT ret;
ret=m_range.GetValue2();
COleSafeArray sa(ret);//将读取的单元格数据存储到一个数组中
long index[2];//r行,c列单元格数据在sa中的索引号
int c;
for(c=1;c<=n;c++)
{
index[0]=1;//构建r行的索引
index[1]=c;//构建c行的索引
sa.GetElement(index,&ret);//得到index的数据
switch(ret.vt)
{
case VT_R8://数字类型
m_str[c-1].Format("%.2f",ret.dblVal);
break;
case VT_BSTR://字符类型
m_str[c-1]=ret.bstrVal;
break;
case VT_EMPTY://空
m_str[c-1].Empty();
break;
}
}
VariantClear(&ret);
sa.Destroy();
}
CString CMapgistwoView::IndexToString( int row, int col )
{
// TODO: Add your control notification handler code here IndexToString
CString strResult;
if( col > 26 )
{
strResult.Format(_T("%c%c%d"),‘A’ + (col-1)/26-1,‘A’ + (col-1)%26,row);
}
else
{
strResult.Format(_T("%c%d"), ‘A’ + (col-1)%26,row);
}
return strResult;
}