1. 程式人生 > >vs2008下用MFC讀寫excel檔案

vs2008下用MFC讀寫excel檔案

CApplication app1;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
CRange iCell;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if(!app1.CreateDispatch(_T("Excel.Application"),NULL))
  {   
  AfxMessageBox(_T("無法啟動Excel伺服器!"));  
  return;   
  }    
  books.AttachDispatch(app1.get_Workbooks());   
  lpDisp = books.Open("D:\\test.xlsx",covOptional, covOptional, covOptional , covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional,covOptional);  


  //得到Workbook    
  book.AttachDispatch(lpDisp); 
  //得到Worksheets   
  sheets.AttachDispatch(book.get_Worksheets());  


  //得到當前活躍sheet   
  //如果有單元格正處於編輯狀態中,此操作不能返回,會一直等待   
  lpDisp=book.get_ActiveSheet();  
  sheet.AttachDispatch(lpDisp);   
  //讀取第一個單元格的值   
  range.AttachDispatch(sheet.get_Cells());   
  range.AttachDispatch(range.get_Item (COleVariant((long)2),COleVariant((long)1)).pdispVal );   
   vResult=range.get_Value2();  
  CString str;    
  if(vResult.vt==VT_BSTR) //字串  
  {   
  str=vResult.bstrVal;  
  }    
  else if (vResult.vt==VT_R8) //8位元組的數字  
  {    
  str.Format("%f",vResult.dblVal);   
  }  


                                     // app1.put_Visible(TRUE);
//app1.put_UserControl(TRUE);
  books.Close();    
  app1.Quit();             // 退出  
  //釋放物件      
  range.ReleaseDispatch();   
  sheet.ReleaseDispatch();  
  sheets.ReleaseDispatch();  
  book.ReleaseDispatch();   
  books.ReleaseDispatch();  
  app1.ReleaseDispatch();  
  //OnOK();  
  MessageBox(str);