大概代码如下:
_Application excelapp;
 Workbooks books;
 _Workbook book;
 Worksheets sheets;
 _Worksheet sheet;
  
 Range range;
 Range usedRange;
 LPDISPATCH lpDisp;   
 VARIANT vResult;
  if(!excelapp.CreateDispatch("Excel.Application"))
 {
  MessageBox("确认是否安装了Excel");
 }
  
 books.AttachDispatch(excelapp.GetWorkbooks());
 //打开Excel
 lpDisp = books.Open(strFilePath,   
  covOptional, covOptional, covOptional, covOptional, covOptional,
  covOptional, covOptional, covOptional, covOptional, covOptional,
  covOptional, covOptional, covOptional, covOptional
  );
 book.AttachDispatch(lpDisp);
 sheets.AttachDispatch(book.GetWorksheets());
 lpDisp = book.GetActiveSheet();
 sheet.AttachDispatch(lpDisp);
  
  //读取单元格的值
 range.AttachDispatch(sheet.GetCells());//这句可以改成1个单元格
 
  vResult = range.GetValue2();

获取VARIANT 类型之后构造safearray
Colesafearray sa(vResult)如果读取的range中列数为0或1时构造函数执行就会报错,请问怎么解决列数为1的问题;