若要返回 $ 多单元格范围中的 $ 值而无需查询单元格一个接一个,您必须返回一个 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();
- 编译该项目并运行它。
- 单击运行。在输出窗口中显示在单元格 A1:C8 值。
有关使用 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 *