描述:
IDispatchPtr spDisp;
spDisp = m_spApp->GetSelection(1);//m_spApp Excel应用接口_Application对象
CComQIPtr<MSExcel::Range> pRange(spDisp);此处已取得选中的区域,对象为pRange,但无法取其区域中单独单元的变量值
取单一指定单元变量
//spDisp = m_spApp->GetRange(_variant_t("A1"),_variant_t("a1"));
//CComQIPtr<MSExcel::Range> pRangeTemp(spDisp);
//(_bstr_t)pRangeTemp->Value; A1单元的变量
解决方案1:
char* IndexToString(int row, int col, char *strResult)
{
assert(!IsBadWritePtr(strResult,sizeof(char*)));
assert(row >0);
assert(col >0);
if (row < 1 || col < 1 ||IsBadWritePtr(strResult,sizeof(char*)) )
{
return "";
}
if(col > 26)
{
sprintf(strResult, "%c%c%d",'A'+(col-1)/26-1, 'A'+(col-1)%26, row);
}
else
{
sprintf(strResult, "%c%d", 'A' + (col-1)%26, row);
}
return strResult;
}
TCHAR tszRange[32];
IndexToString(iFixedRowCnt,iFixedColCnt,tszRange);
_bstr_t bstrRange (tszRange);
Excel::RangePtr pRange1 = pSheet ->GetRange (bstrRange);
我看到的程序都是用Range循环得到一个个的单元格来完成对一块(多个单元格)区域的信息进行提取和处理,如
for(int ii=1;ii<6;ii++){
for(int jj=1;jj<6;jj++){
char tt='A'+ii-1;//得到某行
CString str;
str.Format("%c%d",tt,jj);//得到某个单元格,如"B3"
Range r=sheet.GetRange(COleVariant(str),vOpt);
...//处理单元格
}
}