获得单元格的公式很简单,通过
Range oCurCell;
oCurCell.AttachDispatch( m_oCurrRange.GetItem( COleVariant( (long)i ), COleVariant( (long)j ) ).pdispVal, TRUE ); // m_oCurrRange
是成员变量
VARIANT var = oCurCell.GetFormula();
CString strFormula = var.bstrVal;
原本想同理,GetComment函数就可以获得备注,但是发现GetComment返回的是一个指针,于是又想attach这个指针后,调用GetText()会不会获得Comment文本呢,还是不行。于是找到了下面的方法:
CString strCellContent;
LPDISPATCH lpDisp;
lpDisp = oCurCell.GetComment(); // 先使用GetComment获得指针
if ( !lpDisp )
{
continue;
}
DISPID dispCommentText;
wchar_t* ucPtr = _T( "Text" ); // Comment
的一个属性
//
取属性的接口号
lpDisp->GetIDsOfNames( IID_NULL,
&ucPtr,
1,
LOCALE_USER_DEFAULT,
&dispCommentText );
DISPPARAMS dpRangeItem = {NULL, NULL, 0, 0};
HRESULT hr = lpDisp->Invoke( dispCommentText,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dpRangeItem,
&var,
NULL,
NULL );
lpDisp->Release(); // 释放指针
strCellContent = var.bstrVal;
这样就成功获得了Excel单元格的备注。