1. 创建新的C++工程

  创建基于对话框的MFC程序

2. 添加库、添加Excel类库

在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)

类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 11.0 Object Library<1.5>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。

修改头文件

分别将加进来的六个头文件上面的“#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace”注释掉。

4. 添加头文件

在stdAfx.h头文件中添加加进来的这几个头文件

#include "CApplication.h"

#include "CRange.h"

#include "CWorkbook.h"

#include "CWorkbooks.h"

#include "CWorksheet.h"

#include "CWorksheets.h"

5. 修改错误

编译,会出现两个错误:

…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足

…\crange.h(335): error C2059: 语法错误:“,”

双击错误提示,定位在错误行,

VARIANT DialogBox()

{

VARIANT result;

InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);

return result;

}

将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。

6. 在对话框中添加一个编辑框,并为其关联一CEdit类型变量m_Path,添加“打开”按钮,实现打开一已经存在的Excel文件。并将路径显示在编辑框中。实现代码如下。

void CExportToExcelDlg::OnBnClickedButtonOpen()

{

CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

_T("EXCEL文件t(*.xls;*.xlsx)|*.xls;*.xlsx||"),AfxGetMainWnd());

if(file.DoModal()==IDOK)

{

CString strPath=file.GetPathName();

m_Path.SetWindowTextW(strPath);

CApplication app;

CWorkbook book;

CWorkbooks books;

if (!app.CreateDispatch(_T("Excel.Application")))

{

MessageBox(_T("Error!Creat Excel Application Server Faile!"));

exit(1);

}

//books.AttachDispatch(app.get_Workbooks(),true);

//book.AttachDispatch(books.Add(_variant_t(strPath)));

books = app.get_Workbooks();

book = books.Add(_variant_t(strPath));

app.put_Visible(true);

//结尾,释放

book.ReleaseDispatch();

books.ReleaseDispatch();

app.ReleaseDispatch();

app.Quit();

}

}

7. 在对话框中添加“写入”按钮,实现新建一Excel文件(存在则覆盖),并向文件中写入数据。实现代码如下。

void CExportToExcelDlg::OnBnClickedButtonWrite()

{

CString strFile = _T("D:\\WriteToExcelTest.xlsx");

COleVariant

covTrue((short)TRUE),

covFalse((short)FALSE),

covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);

CApplication app;

CWorkbook book;

CWorkbooks books;

CWorksheet sheet;

CWorksheets sheets;

CRange range;

CFont font;

if (!app.CreateDispatch(_T("Excel.Application")))

{

MessageBox(_T("Error!Creat Excel Application Server Faile!"));

}

books = app.get_Workbooks();

//books.AttachDispatch(app.get_Workbooks());可代替上面一行

book = books.Add(covOptional);

//book.AttachDispatch(books.Add(covOptional),true); 可代替上面一行

sheets=book.get_Worksheets();

//sheets.AttachDispatch(book.get_Worksheets(),true); 可代替上面一行

sheet = sheets.get_Item(COleVariant((short)1));

//sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true); 可代替上面一行

//下面两行,是向A1中写入"Yeah!I can write data to excel!"

range = sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1")));

range.put_Value2(COleVariant(_T("Yeah!I can write data to excel!")));

//下面是向第二行的前十个单元格中输入1到10,十个数字

for(long i=1;i<11;i++)

range.put_Item(_variant_t((long)2),_variant_t((long)i),_variant_t((long)i));

//设置列宽

range = sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("J1")));

range.put_ColumnWidth(_variant_t((long)5));

//显示表格

app.put_Visible(TRUE);

//保存

book.SaveCopyAs(COleVariant(strFile));

book.put_Saved(true);

//结尾,释放

book.ReleaseDispatch();

books.ReleaseDispatch();

app.ReleaseDispatch();

app.Quit();

}

8. 在对话框中添加列表控件,并关联变量m_Grid,并设置显示为报表样式。在对话框中添加“写入列表”按钮,实现将对话框中已有的表写入到Excel中。实现代码如下。

在初始化函数中,先初始化列表。

//设置列表视图的扩展风格

m_Grid.SetExtendedStyle(LVS_EX_FLATSB//扁平风格显示滚动条

|LVS_EX_FULLROWSELECT//允许整行选中

|LVS_EX_HEADERDRAGDROP//允许整列拖动

|LVS_EX_ONECLICKACTIVATE//单击选中项

|LVS_EX_GRIDLINES);//画出网格线

//设置表头

m_Grid.InsertColumn(0,_T("编号"),LVCFMT_LEFT,100,0);

m_Grid.InsertColumn(1,_T("姓名"),LVCFMT_LEFT,100,1);

m_Grid.InsertColumn(2,_T("所属部门"),LVCFMT_LEFT,100,2);

//向列表中插入数据

int count = 0;

m_Grid.InsertItem(count,_T("001"));

m_Grid.SetItemText(count,1,_T("张一"));

m_Grid.SetItemText(count++,2,_T("销售部"));

m_Grid.InsertItem(count,_T("002"));

m_Grid.SetItemText(count,1,_T("列二"));

m_Grid.SetItemText(count++,2,_T("研发部"));

m_Grid.InsertItem(count,_T("003"));

m_Grid.SetItemText(count,1,_T("宇三"));

m_Grid.SetItemText(count++,2,_T("采购部"));

m_Grid.InsertItem(count,_T("004"));

m_Grid.SetItemText(count,1,_T("宙四"));

m_Grid.SetItemText(count,2,_T("宣传部"));

再编写按钮的响应函数

void CExportToExcelDlg::OnBnClickedButtonWritelist()

{

// TODO: 在此添加控件通知处理程序代码

CString strFile = _T("D:\\WriteListToExcelTest.xlsx");

COleVariant

covTrue((short)TRUE),

covFalse((short)FALSE),

covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);

CApplication app;

CWorkbook book;

CWorkbooks books;

CWorksheet sheet;

CWorksheets sheets;

CRange range;

if (!app.CreateDispatch(_T("Excel.Application")))

{

MessageBox(_T("Error!Creat Excel Application Server Faile!"));

exit(1);

}

books = app.get_Workbooks();

book = books.Add(covOptional);

sheets = book.get_Worksheets();

sheet = sheets.get_Item(COleVariant((short)1));

//得到全部Cells

range.AttachDispatch(sheet.get_Cells());

CString sText[]={_T("编号"),_T("姓名"),_T("所属部门")};

for (int setnum=0;setnum<m_Grid.GetItemCount()+1;setnum++)

{

for (int num=0;num<3;num++)

{

if (!setnum)

{

range.put_Item(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)),

_variant_t(sText[num]));

}

else

{

range.put_Item(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)),

_variant_t(m_Grid.GetItemText(setnum-1,num)));

}

}

}

//保存

book.SaveCopyAs(COleVariant(strFile));

book.put_Saved(true);

app.put_Visible(true);

//释放对象

range.ReleaseDispatch();

sheet.ReleaseDispatch();

sheets.ReleaseDispatch();

book.ReleaseDispatch();

books.ReleaseDispatch();

app.ReleaseDispatch();

app.Quit();

}

EXCEL类型库的添加的更多相关文章

  1. [转]如何使用MFC和类型库创建自动化项目

    本文转自:http://www.cnblogs.com/zhoug2020/archive/2012/04/01/2429064.html 摘要 本文详细介绍了如何自动化像Microsoft Offi ...

  2. Delphi COM编程技术三类型库(库文件中的工具栏,很全)

    在COM组件的使用和开发过程中经常需要获取有关组件的信息.而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取.通过访问类型库就可以查看COM组件的信息. 一.类型库的基础 ...

  3. EXCEL 引用autocad vba,自动加载其类型库

    Sub AutoADDAutoCADTypeLib() Dim Ref As Variant Dim hasAutoTypeLib As Boolean, hasAXDBLib As Boolean, ...

  4. 格式太旧或是类型库无效。 (Exception from HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT))

    错误提示信息 格式太旧或是类型库无效. (Exception from HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT)) . Old format or invali ...

  5. postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库

    最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...

  6. 自定义控件如何给特殊类型的属性添加默认值 z

    定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚 标题有点那啥,但确实能表达我掌握此法后的心情. 写自定义控件时往往会有一个需求,就是给属性指定一个默认值(就是可以在VS中右键该 ...

  7. 解决 “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符 类型库符号与系统符号冲突问题

    今天在VS工程当中引入一个组件,编译的时候出现警告, “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏:使用“rename”限定符.虽然只是一个警告,但看着实在不爽,更重要的是,警告 ...

  8. 获取COM组件类型库信息

    类型库type library的作用是什么? 用来描述这个COM组建的接口信息,比如有多少个接口,每个接口有什么函数,函数的描述之类的.MSDN查一下ITypeLib,ITypeInfo,TypeAt ...

  9. (转)使用Excel批量给数据添加单引号和逗号

    在使用PLSQL连接oracle数据库处理数据的过程中,常用的操作是通过ID查询出数据,ID需要附上单引号,如果查询的ID为一条或者几条,我们手动添加即可,但是如果是几百条.几千条的话,就需要使用一些 ...

随机推荐

  1. PHP正则表达式 /i, /is, /s, /isU等 都是些什么东西呢?

    PHP正则表达式 /i, /is, /s, /isU等 都是些什么东西呢? i 不区分大小写 s 模式中的圆点元字符(.)匹配所有的字符,包括换行符 x 模式中的空白字符除了被转义的或在字符类中的以外 ...

  2. C++ 之虚函数的实现原理

    c++的多态使用虚函数实现,通过“晚绑定”,使程序在运行的时候,根据对象的类型去执行对应的虚函数. C++ 之虚函数的实现原理 带有虚函数的类,编译器会为其额外分配一个虚函数表,里面记录的使虚函数的地 ...

  3. scala学习手记32 - trait选择性混入

    继续上一节. 狗当然是人类的好朋友.但是藏獒呢?这玩意儿又蠢又笨又凶狠,肯定不能算很多人的好朋友了.其实,刚才那句话还可以修正一下下:我们接受的狗才是我们的好朋友. 用程序怎么实现呢?在java里面, ...

  4. python学习笔记(pict+requests+xml)

    博主尝试了下更换python版本 之前很多脚本改正运行错误后.还是不能正常运行 忙会了半天还是没有成功 只好还原版本 所以下面的代码还没实际运行成功.先记录下 #!/usr/bin/env pytho ...

  5. MySQL5.7版本开启二进制日志是log_bin、bin-log 还是 bin_log ?

    已Mac系统为例,文件:/usr/local/mysql/support-files/my-default.cnf 是mysql的默认配置文件,你可以直接修改这个文件但是不推荐,你可以在/etc/my ...

  6. 在Windows Server 2012上安装SharePoint 2010 SP1

    现在很多企业的系统都开始用上了Windows 2012,最近公司需要建立一个门户系统,一开始就想到了微软的SharePoint2010,这玩意确实非常强悍,2008已经褪去,当然直接在Windows ...

  7. C#中的字符串及其编码转换

    (转自:http://blog.sina.com.cn/s/blog_498eab7d0100et7j.html) 根据查找的System.Text.Encoding类的属性,方法写了如下的转换程序: ...

  8. 如何切换到自定义的Activity

    一. 新建一个空的工程,并添加一个按钮 二.新建一个布局文件,命名为my_aty, 并添加一个文本 三.新建一个类,命名为MyAty,并重写onCreate函数 public void onCreat ...

  9. CSS:Tutorial one

    1.Three Ways to Insert CSS External style sheet Internal style sheet Inline style External Style She ...

  10. PostgreSQL窗口函数(转)

    转自:http://time-track.cn/postgresql-window-function.html PostgreSQL提供了窗口函数的特性.窗口函数也是计算一些行集合(多个行组成的集合, ...