VC读取写入EXCEL2003文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用automation
具体如下:
1。

你要在新建的工程中导入excel的类库。

以新建基础对话框工工程test为例。

建好后通过类向导(ctrl+w)addclass选from a type libray...,excel2003的是excel.exe文件,在c:/program files/microsoft office/office11/文件夹下。

选excel.exe,把所有的类都导入,注意使用Shift按键选择。

2。

在testApp::InitInstance()中初始化,
AfxOleInit();//加在initinstance方法里最前就好。

3. 在对话框中加一个按钮,双击按钮对应的处理函数如下:
别望了在加头文件:
在#include "stdafx.h"后面加#include "excel.h"
3.1//打开Excel文件,使用Excel程序显示,不读数据,也不写入数据,手工使用鼠标关闭Excel文件。

//声明操作excel文件类的对象
_Application objApp;// _application代表了EXCEL服务器
Workbooks objBooks; //workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//检测电脑上是否安装了Excel程序。

if(!objApp.CreateDispatch("Excel.Application"))
{ AfxMessageBox("无法启动Excel程序,请正确安装!");
return;
}
objApp.m_bAutoRelease = TRUE; //??什么意思?
objApp.SetVisible(TRUE); //打开Excel程序,没有显示任何数据。

objApp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝
//下面两句的功能和objBooks = objApp.GetWorkbooks(); 一样。

LPDISPATCH pWkBooks = objApp.GetWorkbooks(); //GetWorkbooks什么功能?
objBooks.AttachDispatch(pWkBooks,TRUE); //将一个IDispatch连接附着于COleDispatchDriver对象
//获得当前程序所在的路径,excel文件在此路径下。

char CurrentProgramPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,CurrentProgramPath);
CString ExcelFilePathName = CurrentProgramPath;//ExcelFilePathName表示excel文件的路径和文件名
ExcelFilePathName += "\\Data.xls";
//打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。

//如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。

//采用只读方式打开excel文件,_variant_t(true), true必须为小写,大写编译出错。

objBooks.Open(ExcelFilePathName,VOptional, _variant_t(true), VOptional, VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional,
VOptional,VOptional,VOptional);
3.2//打开Excel文件,读出其中的数据,供后面设置Mschart控件使用。

//Excel文件使用三列,第一列表示序号,第二列表示第一组份的数据,第二列表示第二组份的数据。

//声明操作excel文件类的对象
_Application objApp; //_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 表示元素的集合
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
VARIANT ret;
CString cstr="";
//检测电脑上是否安装了Excel程序。

if(!objApp.CreateDispatch("Excel.Application"))
{ AfxMessageBox("无法启动Excel服务器!");
return;
}
// objApp.SetVisible(TRUE); //打开Excel程序,没有显示任何数据。

// objApp.SetUserControl(FALSE);//允许其它用户控制Excel,否则Excel将一闪即逝// objApp.m_bAutoRelease = TRUE; //??什么意思?
objBooks = objApp.GetWorkbooks();
//获得当前程序所在的路径,excel文件在此路径下。

char CurrentProgramPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,CurrentProgramPath);
CString ExcelFilePathName = CurrentProgramPath;//ExcelFilePathName表示excel文件的路径和文件名
ExcelFilePathName += "\\Data.xls";
//打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。

//如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。

//采用只读方式打开excel文件,_variant_t(true), true必须为小写,大写编译出错。

objBook = objBooks.Open(ExcelFilePathName,VOptional, _variant_t(true), VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);
objSheets = objBook.GetWorksheets();
//设定当前的工作表sheet是excel文件的第几个工作表sheet COleVariant((short)1)
表示第一个COleVariant((short)2)表示第二个
objSheet = objSheets.GetItem(COleVariant((short)1));
//获得已经使用的行数和列数。

usedRange.AttachDispatch(objSheet.GetUsedRange());
objRange.AttachDispatch(usedRange.GetRows());
long iRowNum=objRange.GetCount();//已经使用的行数
objRange.AttachDispatch(usedRange.GetColumns());
long iColumnNum=objRange.GetCount();//已经使用的列数
//设定读取的行列范围
//objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C1000"));
ret = objRange.GetValue(VOptional);
COleSafeArray sa(ret);
//读出内容。

long lNumRows; long lNumCols;
sa.GetUBound(1, &lNumRows); sa.GetUBound(2, &lNumCols);
long index[2];
VARIANT val;
int row, column;
for(row=1;row<=iRowNum;row++)//row表示行数
{ for(column=1;column<=iColumnNum;column++)//c表示列数
{ index[0]=row;index[1]=column;
sa.GetElement(index, &val);//val类对象中包含取的row行、column列的内容
switch(val.vt)
{ case VT_R8: //数字
{ //TRACE("\t\t%1.2f", val.dblVal);
CString cstr2=""; cstr2.Format("%1.1f",val.dblVal); cstr+=cstr2+"\n";
break;
}
case VT_BSTR: //文字
{//TRACE("\t\t%s",(CString)val.bstrVal);
cstr+=(CString)val.bstrVal+"\n";
break;
}
case VT_EMPTY://表示此row行、column列的内容为空。

break;
}
}
}
AfxMessageBox(cstr);
objBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
objApp.Quit();
3.3//打开一个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 += "\\Data.xls";
objBooks.AttachDispatch(objApp.GetWorkbooks()); //此句的功能objBooks = objApp.GetWorkbooks();一样
//打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。

//如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。

lpDisp=objBooks.Open(ExcelFilePathName,VOptional,VOptional,VOptional,VOptional,V Optional,
VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOp tional);
objBook.AttachDispatch(lpDisp);
//设定当前的工作表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);
objBook.Close(VOptional,COleVariant(ExcelFilePathName),VOptional);
objBooks.Close();
objApp.Quit();。

相关文档
最新文档