将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();
}