若要返回 $ 多单元格范围中的 $ 值而无需查询单元格一个接一个,您必须返回一个 VARIANT 值使用 GetValue 成员函数的 Range 对象。您然后构造一个 SAFEARRAY 基于您从 GetValue 返回该 VARIANT。在您有了该 SAFEARRAY 后您可以访问使用 GetElement 元素。以下步骤演示此过程,并演示如何访问字符串和数字的元素。
自动完成 Microsoft Excel 2000 和 2002年的笔记
// OLE Variant for Optional.
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application objApp;
_Workbook objBook;
Workbooks objBooks;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange;
VARIANT ret;
// Instantiate Excel and open an existing workbook.
objApp.CreateDispatch("Excel.Application");
objBooks = objApp.GetWorkbooks();
objBook = objBooks.Open("C://Test.xls",
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional);
objSheets = objBook.GetWorksheets();
objSheet = objSheets.GetItem(COleVariant((short)1));
//Get the range object for which you wish to retrieve the
//data and then retrieve the data (as a variant array, ret).
objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));
ret = objRange.GetValue();
//Create the SAFEARRAY from the VARIANT ret.
COleSafeArray sa(ret);
//Determine the array's dimensions.
long lNumRows;
long lNumCols;
sa.GetUBound(1, &lNumRows);
sa.GetUBound(2, &lNumCols);
//Display the elements in the SAFEARRAY.
long index[2];
VARIANT val;
int r, c;
TRACE("Contents of SafeArray/n");
TRACE("=====================/n/t");
for(c=1;c<=lNumCols;c++)
{
TRACE("/t/tCol %d", c);
}
TRACE("/n");
for(r=1;r<=lNumRows;r++)
{
TRACE("Row %d", r);
for(c=1;c<=lNumCols;c++)
{
index[0]=r;
index[1]=c;
sa.GetElement(index, &val);
switch(val.vt)
{
case VT_R8:
{
TRACE("/t/t%1.2f", val.dblVal);
break;
}
case VT_BSTR:
{
TRACE("/t/t%s",(CString)val.bstrVal);
break;
}
case VT_EMPTY:
{
TRACE("/t/t<empty>");
break;
}
}
}
TRACE("/n");
}
//Close the workbook without saving changes
//and quit Microsoft Excel.
objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);
objApp.Quit();
有关使用 MFC 的 Microsoft Excel 的自动化的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
186120
(http://support.microsoft.com/kb/186120/EN-US/ ) 如何使用 MFC 自动化 Excel 和填充具有数组范围
184663
(http://support.microsoft.com/kb/184663/EN-US/ ) 如何嵌入和自动化使用 MFC 的 Microsoft Excel 工作表
179706
(http://support.microsoft.com/kb/179706/EN-US/ ) 如何使用 MFC 自动化 Excel 和创建/格式新的工作簿
178781
(http://support.microsoft.com/kb/178781/EN-US/ ) HOWTO: 自动化 Excel 使用 MFC 和工作表函数
178783
(http://support.microsoft.com/kb/178783/EN-US/ ) HOWTO: 使用 MFC 创建 Excel 图表
167668
(http://support.microsoft.com/kb/167668/EN-US/ ) 如何传递的字符串 safearray 之所以在 VARIANT *