将VC中的数据存取于EXCEL中

void CTestExcelDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
  _Application app;  //excel 应用实例对象
  Workbooks books;  //工作簿集合
  _Workbook book;  //工作簿
  Worksheets sheets;  //工作表集合
  _Worksheet sheet;  //工作表
  Range range;   //单元格区域
  Font font;    //字体
  Range cols;
  COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  if( !app.CreateDispatch("Excel.Application") ,NULL)
  {
   this->MessageBox("无法创建Excel应用!");
   return;
  }
  books=app.GetWorkbooks();
  book=books.Add(covOptional);
  sheets=book.GetSheets();
  sheet=sheets.GetItem(COleVariant((short)1));
  range=sheet.GetRange(COleVariant("A4"),COleVariant("A4"));
  range.SetValue(COleVariant("HELLO EXCEL!"));
  font=range.GetFont();
  font.SetBold(COleVariant((short)TRUE));
  range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));
  range.SetFormula(COleVariant("=RAND()*100000"));
  range.SetNumberFormat(COleVariant("$0.00"));
  cols=range.GetEntireColumn();
  cols.AutoFit();
  app.SetVisible(TRUE);
  app.SetUserControl(TRUE);
  app.SetAlertBeforeOverwriting(FALSE);  //取消提示是否保存的对话框
  app.SetDisplayAlerts(FALSE);//取消提示是否保存的对话框
  book.SaveAs(COleVariant("C:\\a.xls"),covOptional,  covOptional,covOptional,
   covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,  covOptional);

}

void CTestExcelDlg::OnButton2()
{
 // TODO: Add your control notification handler code here
}

void CTestExcelDlg::OnButton3()
{
 // TODO: Add your control notification handler code here
 _Application app;
 Workbooks books;
 _Workbook book;
 Worksheets sheets;
 Range  range;
 _Worksheet sheet;
 LPDISPATCH lpDisp;  //接口指针
 COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 if( !app.CreateDispatch("Excel.Application") ){
  this->MessageBox("无法创建Excel应用!");
  return;
 }
  books=app.GetWorkbooks();
  lpDisp = books.Open("C:\\a.xls",covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional,
   covOptional,covOptional, covOptional, covOptional, covOptional );
  book.AttachDispatch( lpDisp );
  sheets=book.GetSheets();
  sheet=sheets.GetItem(COleVariant((short)1));
  range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
  COleVariant rValue;
  rValue=COleVariant(range.GetValue());
  rValue.ChangeType(VT_BSTR);
  this->MessageBox(CString(rValue.bstrVal));
  book.SetSaved(TRUE);
  app.Quit();
}

void CTestExcelDlg::OnButton4()
{
 // TODO: Add your control notification handler code here
 //打开一个Excel文件,在前面的数据后面添加新的数据
 //声明操作excel文件类的对象
 _Application   objApp;   //组件服务器的各个classes   //_application代表了EXCEL服务器   
 Workbooks   objBooks;//workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),
 _Workbook   objBook;     //_workbook就是一个表,相当于MDI中的一个视窗,
 Worksheets   objSheets;  // worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets) 
 _Worksheet   objSheet;  //_worksheet就表示一个表单,  
 Range   objRange,usedRange; //Range 表示元素的集合 
 LPDISPATCH   lpDisp; //LPDISPATCH就是一个指向excel对象的指针
 COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 
 //检测电脑上是否安装了Excel程序。
 if(!objApp.CreateDispatch("Excel.Application"))   //启动服务器    
 {   AfxMessageBox("无法启动Excel服务器!");    
 return;    
 }
 
 // objApp.m_bAutoRelease   =   TRUE; //??什么意思
 objApp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝
 
 //获得当前程序所在的路径,excel文件在此路径下。
 char CurrentProgramPath[MAX_PATH];    
 GetCurrentDirectory(MAX_PATH,CurrentProgramPath);  
 CString ExcelFilePathName =  CurrentProgramPath;  //ExcelFilePathName表示excel文件的路径和文件名
 ExcelFilePathName   +=   "\\a.xls";    
 
 objBooks.AttachDispatch(objApp.GetWorkbooks());  //此句的功能objBooks = objApp.GetWorkbooks();一样
 objBook.AttachDispatch(lpDisp); 
 //打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。
 //如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。
 lpDisp=objBooks.Open(ExcelFilePathName,VOptional,VOptional,VOptional,VOptional,VOptional,
 VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional);  

 
 //设定当前的工作表sheet
 objSheets.AttachDispatch(objBook.GetWorksheets());    
 lpDisp=objBook.GetActiveSheet();    
 objSheet.AttachDispatch(lpDisp);    
 
 //获得已经使用的行数
 usedRange.AttachDispatch(objSheet.GetUsedRange());    
 objRange.AttachDispatch(usedRange.GetRows());    
 long   iRowNum=objRange.GetCount();//已经使用的行数    
 objRange.AttachDispatch(objSheet.GetCells());    
 
 //追加内容。
 objRange.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVariant("aa"));    
 objRange.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant("bb"));    
 
 objBook.Save();//如果打开的这个excel文件被其它的进程已经打开了,此句代码执行后,会出现提示是否保存的对话框。
 ////如果打开的这个excel文件被其它的进程使用只读方式已经打开了,此句代码执行后,不会出现提示是否保存的对话框
 
 // objApp.SetAlertBeforeOverwriting(FALSE);  //取消提示是否保存的对话框
 // objApp.SetDisplayAlerts(FALSE);//取消提示是否保存的对话框
 //  objBook.SaveAs(COleVariant(ExcelFilePathName),VOptional,VOptional,  //把此文件另存为别的文件名。   
 //     VOptional,VOptional,VOptional,0,VOptional,VOptional,VOptional,VOptional,VOptional);
 

// objApp.ReleaseDispatch();
  
 // 释放对象(相当重要 )
 objApp.ReleaseDispatch();
 objBooks.ReleaseDispatch();
 objBook.ReleaseDispatch();
 objSheets.ReleaseDispatch();
 objSheet.ReleaseDispatch();
 usedRange.ReleaseDispatch(); 
 objRange.ReleaseDispatch();

 objBook.Close(VOptional,COleVariant(ExcelFilePathName),VOptional);    
 objBooks.Close(); 

 //m_ExlApp 一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错

 //退出程序
 objApp.Quit();  
}

void CTestExcelDlg::OnButton5()
{
 // TODO: Add your control notification handler code here
 char CurrentProgramPath[MAX_PATH];    
 GetCurrentDirectory(MAX_PATH,CurrentProgramPath);  
 CString ExcelFilePathName =  CurrentProgramPath;  //ExcelFilePathName表示excel文件的路径和文件名
 ExcelFilePathName   +=   "\\a.xls";    

 // 打开新文件
 COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 CString sValue="";
 _Application objApp;
 _Workbook objBook;
 Workbooks objBooks;
 Worksheets objSheets;
 _Worksheet objSheet;
 Range objRange;
 
 objApp.SetAlertBeforeOverwriting(FALSE);
 objApp.SetDisplayAlerts(FALSE);
 
 objApp.CreateDispatch("Excel.Application");
 objBooks = objApp.GetWorkbooks();
 objBook = objBooks.Open(ExcelFilePathName,VOptional, VOptional,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional);
 objSheets = objBook.GetWorksheets();
 objSheet = objSheets.GetItem(COleVariant((short)1));
 
 objRange.AttachDispatch(objSheet.GetCells(),true);
 // 写数据
 int row,conl;
 row=4;
 conl=4;
 for (int i=1; i<20; ++i)
 {
  for (int j=1; j<10; ++j)
  {
   CString strItem;
   
   strItem.Format("数据 %d - %d", i, j);
   
   COleVariant vItem(strItem);
   
   vItem.ChangeType(VT_BSTR);
  
   
   objRange.SetItem(COleVariant((long)(row)),COleVariant((long)(conl)),vItem);
   row++;
   conl++;
  }
 }
 // 保存文件
 COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 CString strPathName;
 strPathName=ExcelFilePathName;
 strPathName.ReleaseBuffer();
 objBook.Save();
 objRange.ReleaseDispatch();
 // 关闭文件
 objRange.Clear();
 objBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
 objBooks.Close();
 objApp.Quit();
 

}

posted @ 2013-12-12 16:53  ckswordman  阅读(279)  评论(0编辑  收藏  举报