You can write a function that converts row and column indices to strings / variants that can be passed. Here is an example:
LPCTSTR CExcelDispatch::SetCellString(LPTSTR lpszCell, int nRow, int nCol) const
{
LPTSTR lpszOut = lpszCell;
if (--nCol > 25) {
*lpszOut = _T('A') + static_cast<TCHAR>(nCol / 26 - 1);
++lpszOut;
nCol %= 26;
}
*lpszOut = _T('A') + static_cast<TCHAR>(nCol);
_itot(nRow, ++lpszOut, 10);
return lpszCell;
}
Range CExcelDispatch::GetSheetRange(_Worksheet& Worksheet,
int nStartRow, int nStartCol,
int nEndRow , int nEndCol )
{
ASSERT(Worksheet.m_lpDispatch);
ASSERT(nStartRow > 0); ASSERT(nStartCol > 0); ASSERT(nEndRow > 0 || nEndCol < 0); ASSERT(nEndCol > 0 || nEndRow < 0); ASSERT(nStartCol < 26 * 26); ASSERT(nEndCol < 26 * 26);
TCHAR lpszCell[32];
COleVariant vCell1(SetCellString(lpszCell, nStartRow, nStartCol));
COleVariant vCell2((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (nEndRow > 0 && nEndCol > 0 &&
(nEndRow != nStartRow || nEndCol != nStartCol))
{
vCell2 = COleVariant(SetCellString(lpszCell, nEndRow, nEndCol));
}
return Worksheet.GetRange(vCell1, vCell2);
}