C++中的ActiveSheet.Range("A1").Value
HRESULT CExcelWorkbook::HrCellValue(
int iRow,
int iColumn,
CComVariant *pValue)
{
USES_CONVERSION;
HRESULT hr;
ATLASSERT(p); // IDispatch必须在调用方法前设置
if (pValue == NULL)
return E_INVALIDARG;
pValue->Clear();
AssureDispidRange();
TCHAR tzRangeReference[20];
ATLASSERT(iColumn<26); // 支持的不能多于26个,
// 为"CurrentRow"处理特定的值
if (iRow == iCurrentRow && FAILED(hr=GetSelectedRow(iRow)))
return hr;
wsprintf(tzRangeReference, "%c%d", 'A'+(iColumn-1), iRow);
CComVariant varRangeName(T2COLE(tzRangeReference));
CComVariant varRange;
if (SUCCEEDED(hr=GetProperty1(m_dispidRange, &varRangeName,
&varRange)))
{
ATLASSERT(varRange.vt == VT_DISPATCH);
ATLASSERT(varRange.pdispVal);
LPDISPATCH lpRange = varRange.pdispVal;
CComDispatchDriver dispRange(lpRange);
AssureDispidRangeValue(dispRange);
hr = dispRange.GetProperty(m_dispidRangeValue, pValue);
}
return hr;
} |