vc操作excel:[1]初始化连接、创建和写入
-
新建MFC工程,工程名为 3 。在选择From a type library时,选择Microsoft Office安装目录下的office11文件夹,将文件过滤器改为 所有文件,找到excel.exe文件,确定,按shift添加所有的类。(这里有疑问,可参见我的上一篇经验“vc操作word:[1]初始化连接、创建和写入。按:本来想写成系列经验的,奈何百度经验这几天出问题了)
-
先初始化COM库,在CMy3App类的InitInstance函数中,加入以下代码:
if(CoInitialize(NULL)!=S_OK)
{
AfxMessageBox("Fail");
return FALSE;
}
-
新建一个类型为Generic Class的类,命名为CMeExcel
-
在文件视图区打开MeExcel.h文件,如图所示,加入以下代码:
//头文件
#include"comdef.h"
#include"atlbase.h"
#include"excel.h"
以及
//变量申明和函数定义
_Application m_exApp; //Application
_Workbook m_exBook; //表格,单数
Workbooks m_exBooks; //表格,复数
_Worksheet m_exSheet; //表单
Worksheets m_exSheets;
Range m_exRange; //类似于单元格
BOOL CreateApplication();
BOOL CreateWorksheet();
BOOL SetItem();
-
打开MeExcel.cpp文件,如图加入以下代码:
BOOL CMeExcel::CreateWorksheet()
{
m_exBooks.AttachDispatch(m_exApp.GetWorkbooks());
m_exBook.AttachDispatch(m_exBooks.Add(_variant_t("")));
m_exSheets.AttachDispatch(m_exBook.GetWorksheets());
m_exSheet.AttachDispatch(m_exSheets.GetItem(_variant_t("sheet1")));
return TRUE;
}
BOOL CMeExcel::SetItem()
{
m_exRange.AttachDispatch(m_exSheet.GetCells());
m_exRange.SetItem(_variant_t((long)6),_variant_t((long)4),_variant_t("Hello"));
return FALSE;
}
//参照,word文档建立的方法,会对它有更深刻的理解
-
现在开始调用类函数,创建excel表格,并写入数据。只需在对话框中添加成员变量 CMeExcel m_meExcel,在对话框初始化函数中加入以下代码:
m_meExcel.CreateApplication();
m_meExcel.CreateWorksheet();
m_meExcel.SetItem();
-
点击运行。在第三行第五列显示”Hello“。也就是运行m_meExcel.SetItem();函数的结果。
-
补充:在第一次编译运行的时候,出现...\vc98\atl\include\atlbase.h(4497) : error C2660: 'VarCmp' : function does not take 3 parameters的错误,打开atlbase.h文件,果断看不懂,按字面意思的理解,VarCmp函数不带3个参数。在网上找资料,彻底被误导了。打开MSDN,查找VarCmp,好吧,我承认技术不行看不懂,但是它说,总共有4个参数,当最后一个参数为1的时候,Ignore case,忽视的情况,不管,直接传个 1 进去。编译成功!