VC操作excel com方式
来源:互联网 发布:软件客户端 编辑:程序博客网 时间:2024/05/16 07:56
A: 从classwizard中add class处from type library,去office的安装目录下引入excel.exe(这是office 2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,常用的有这几个_application,workbooks,_workbook,worksheets,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks), _workbook就是一个表,相当于MDI中的一个视窗, worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets), _worksheet就表示一个表单, range表示元素的集合. 搞清楚上面这几个名词的意思非常重要.
B,在dlg.h中声明下面几个变量:
_Application exlapp; //组件服务器的各个classes
_Workbook wbk;
Workbooks wbks;
_Worksheet wht;
Worksheets whts;
LPDISPATCH lpDisp;
并在app.cpp的InitInstance方法中加入下面两句AfxInitOle(); AfxEnableControlContainer();
C,这里我没有像上面一样完全用程序来生成一个Excel文件,而是在开始时就在当前目录下生成了一个Excel文件,在对话框上我设置了两个按钮,下面是"显示"按钮的代码:
//创建Excel服务器
if(!exlapp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("无法启动Excel服务器!");
return;
}
COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
exlapp.SetVisible(TRUE);//使Excel可见
exlapp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝.
//Open an excel file
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += "\\VCOpExcel";
wbks.AttachDispatch(exlapp.GetWorkbooks());
lpDisp=wbks.Open(strPath,
avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);
wbks.ReleaseDispatch();
exlapp.ReleaseDispatch();
D,与上面第一种方法一样,可以插入记录:
UpdateData(); //读入数据
if (""==m_name) //判断名字输入有效
{
MessageBox("Please input a right name");
return;
}
if (0>=m_age||100<=m_age) //判断年龄输入有效
{
MessageBox("Please input a right age");
return;
}
char *p=strupr(_strdup(m_gener));
if (strcmp(p,"FEMALE")&&strcmp(p,"MALE")) //判断性别输入有效
{
MessageBox("Please input a right gener");
return;
}
Range range;
Range usedRange;
COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if(!exlapp.CreateDispatch("Excel.Application")) //启动服务器
{
AfxMessageBox("无法启动Excel服务器!");
return;
}
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += "\\VCOpExcel";
wbks.AttachDispatch(exlapp.GetWorkbooks());
lpDisp=wbks.Open(strPath, //初始化.
avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);
wbk.AttachDispatch(lpDisp);
whts.AttachDispatch(wbk.GetWorksheets());
lpDisp=wbk.GetActiveSheet();
wht.AttachDispatch(lpDisp);
usedRange.AttachDispatch(wht.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
long iRowNum=range.GetCount();//已经使用的行数
range.AttachDispatch(wht.GetCells());
range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVariant(m_name));
range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant(m_age));
range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener));
wbk.Save();
wbk.Close(avar,COleVariant(strPath),avar);
wbks.Close();
exlapp.Quit();
B,在dlg.h中声明下面几个变量:
_Application exlapp; //组件服务器的各个classes
_Workbook wbk;
Workbooks wbks;
_Worksheet wht;
Worksheets whts;
LPDISPATCH lpDisp;
并在app.cpp的InitInstance方法中加入下面两句AfxInitOle(); AfxEnableControlContainer();
C,这里我没有像上面一样完全用程序来生成一个Excel文件,而是在开始时就在当前目录下生成了一个Excel文件,在对话框上我设置了两个按钮,下面是"显示"按钮的代码:
//创建Excel服务器
if(!exlapp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("无法启动Excel服务器!");
return;
}
COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
exlapp.SetVisible(TRUE);//使Excel可见
exlapp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝.
//Open an excel file
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += "\\VCOpExcel";
wbks.AttachDispatch(exlapp.GetWorkbooks());
lpDisp=wbks.Open(strPath,
avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);
wbks.ReleaseDispatch();
exlapp.ReleaseDispatch();
D,与上面第一种方法一样,可以插入记录:
UpdateData(); //读入数据
if (""==m_name) //判断名字输入有效
{
MessageBox("Please input a right name");
return;
}
if (0>=m_age||100<=m_age) //判断年龄输入有效
{
MessageBox("Please input a right age");
return;
}
char *p=strupr(_strdup(m_gener));
if (strcmp(p,"FEMALE")&&strcmp(p,"MALE")) //判断性别输入有效
{
MessageBox("Please input a right gener");
return;
}
Range range;
Range usedRange;
COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if(!exlapp.CreateDispatch("Excel.Application")) //启动服务器
{
AfxMessageBox("无法启动Excel服务器!");
return;
}
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += "\\VCOpExcel";
wbks.AttachDispatch(exlapp.GetWorkbooks());
lpDisp=wbks.Open(strPath, //初始化.
avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);
wbk.AttachDispatch(lpDisp);
whts.AttachDispatch(wbk.GetWorksheets());
lpDisp=wbk.GetActiveSheet();
wht.AttachDispatch(lpDisp);
usedRange.AttachDispatch(wht.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
long iRowNum=range.GetCount();//已经使用的行数
range.AttachDispatch(wht.GetCells());
range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVariant(m_name));
range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant(m_age));
range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener));
wbk.Save();
wbk.Close(avar,COleVariant(strPath),avar);
wbks.Close();
exlapp.Quit();
- VC操作excel com方式
- qt操作Excel com方式
- vc 通过ODBC 方式操作EXCEL
- VC 操作Excel的几种方式
- vc 通过ODBC 方式操作EXCEL
- C#操作Excel的OLEDB方式与COM方式比较
- vc下通过ODBC的方式操作Excel文件
- vc++ 操作COM
- COM操作Excel
- COM操作excel
- VC操作EXCEL
- VC操作EXCEL(1)
- vc操作Excel(2)
- VC操作excel表格
- VC操作Excel
- vc操作Excel。
- VC操作Excel(总结)
- VC++操作Excel 2007
- Spring---->AOP的术语
- Latex 双栏模式中的单栏摘要
- MS-PPT 文件格式概述
- 使用Filter实现编码过滤器
- 工厂方法模式
- VC操作excel com方式
- hadoop0.23 的代码编译与Eclipse环境下调试 问题
- 奢望
- 【IPhone开发】Apple Push Notification Service系列:整合私钥和证书,生成.p12文件
- singletask和onNewintent
- 聊聊工作那些事儿
- Linux音频设备驱动
- 更该sql 2005表名前缀 更改为dbo
- RedHat9安装OpenLDAP