https://blog.csdn.net/ywx123_/article/details/77074038

VS2010对Excel读写操作
一、开发环境
编程环境 VS2010
office版本 office 2010
注意 :这里office版本号不一定非得和vs版本号一致。
二、基本实现功能
基本实现对Excel的读写
创建一个表格,并向里面写入内容
三、基本操作步骤
1. 新建一个基于MFC的对话框工程。
如下图。注意:勾选基本对话框。默认编码方式使用的是Unicode库,在对字符操作时需要将char转化为TCHAR,一般用_T(“xxx”)即可。(vc6 默认不是uicode这点需要区别)

图1
其余选择,默认直接点击完成即可。生成一个基本对话框如图2。

图2
将上面的默认控件删除。

2. 导入Excel类库
从office安装目录下找到EXCEL.exe(D:\Program Files(x86)\Microsoft Office\Office14),在VS2010中添加类库(从类库中添加)类向导->添加类->从类库中添加。如图3、图4

图3

图4
依次从接口:_Application、_Workbook、_Worksheet、Workbooks、Worksheets、Font、Range(暂时只用到这些)生成对应的类(CApplication 、CWorkbook、CWorksheet、CWorkbook、Cworksheets、CFont0、CRange)如图5所示。点击确定,总生成对应.h、.cpp文件并添加到工程。

图5
在所建对话框添加一个按钮,名字修改为导出EXCEL,ID修改为IDC_BTN_EXCEL,添加一个消息消息函数(这里为OnBtnExcel())。

3. 解决导入工程后的编译错误。
在stdafx.h中包含,以上头文件,编译。
#include "CApplication.h"
#include "CFont0.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
1
2
3
4
5
6
7
屏蔽掉导入每个头文件下的//#import “D:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE” no_namespace
编译出现1>c:\users\desktop\exceltest\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足。将DialogBox修改为_DialogBox。
4. 实例代码。
在CExcelTestApp的InitInstance初始化com组件,添加COM/OLE支持
    if(CoInitialize(NULL)!=0)
    {
        AfxMessageBox(_T("初始化失败"));
    }
1
2
3
4
同时在ExitInstance里释放资源

CoUninitialize();  //释放com资源
1
在对话框的按钮事件实现导出EXCEL。
/**********************************************************************
*作者:ywx2904
*函数名:OnBtnExcel
*功  能:创建Excel,向里面添加内容,并导出
*参  数: 无
*返回值:无
***********************************************************************/
void CExcelTestDlg::OnBtnExcel()
{
    //1.创建基本对象
    CApplication App;  //创建应用程序实例
    CWorkbooks Books;  //工作簿,多个Excel文件
    CWorkbook Book;    //单个工作簿
    CWorksheets sheets;//多个sheet页面
    CWorksheet sheet;  //单个sheet页面
    CRange range;      //操作单元格
    //2.打开指定Excel文件,如果不存在就创建
    char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,(TCHAR*)path);//获取当前路径
    CString strExcelFile =(TCHAR*) path;
    CString strdevName = _T("\\Test.xlsx");    //xls也行
    strExcelFile += strdevName;
    COleVariant
        covTrue((short)TRUE),
        covFalse((short)FALSE),
        covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

LPDISPATCH lpdisp = NULL;
    //1.创建Excel实例
    if(!App.CreateDispatch(_T("Excel.Application"),NULL))
    {
        AfxMessageBox(_T("创建Excel实例失败"));
        exit(-1);
    }
    else
    {
        AfxMessageBox(_T("创建成功"));
    }
    App.put_Visible(TRUE);  //打开Excel
    App.put_UserControl(FALSE); 
    //2. 得到workbooks容器
    Books.AttachDispatch(App.get_Workbooks());
    Book.AttachDispatch(Books.Add(covOptional));
    sheets.AttachDispatch(Book.get_Worksheets());
    sheet.AttachDispatch(sheets.get_Item(COleVariant((short)1)));   //获取sheet1
    sheet.put_Name(_T("TestName"));     //设置sheet1名字

//3. 加载要合并的单元格
    range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")),COleVariant(_T("E2"))),TRUE);
    range.Merge(COleVariant((long)0));  //合并单元格

//4. 设置表格内容
    range.AttachDispatch(sheet.get_Cells(),TRUE);               //加载所有单元格
    range.put_Item(COleVariant((long)2),COleVariant((long)2),COleVariant(_T("电气工程及其自动化课程统计")));
    range.put_Item(COleVariant((long)3),COleVariant((long)2),COleVariant(_T("课程名称")));
    range.put_Item(COleVariant((long)3),COleVariant((long)3),COleVariant(_T("课时")));
    range.put_Item(COleVariant((long)3),COleVariant((long)4),COleVariant(_T("难度")));
    range.put_Item(COleVariant((long)3),COleVariant((long)5),COleVariant(_T("教学方式")));

range.put_Item(COleVariant((long)4),COleVariant((long)2),COleVariant(_T("电磁场")));
    range.put_Item(COleVariant((long)4),COleVariant((long)3),COleVariant(_T("30")));
    range.put_Item(COleVariant((long)4),COleVariant((long)4),COleVariant(_T("变态难")));
    range.put_Item(COleVariant((long)4),COleVariant((long)5),COleVariant(_T("老师讲课")));

range.put_Item(COleVariant((long)5),COleVariant((long)2),COleVariant(_T("电机学")));
    range.put_Item(COleVariant((long)5),COleVariant((long)3),COleVariant(_T("40")));
    range.put_Item(COleVariant((long)5),COleVariant((long)4),COleVariant(_T("难")));
    range.put_Item(COleVariant((long)5),COleVariant((long)5),COleVariant(_T("老师讲课加实验")));

range.put_Item(COleVariant((long)6),COleVariant((long)2),COleVariant(_T("PLC")));
    range.put_Item(COleVariant((long)6),COleVariant((long)3),COleVariant(_T("20")));
    range.put_Item(COleVariant((long)6),COleVariant((long)4),COleVariant(_T("普通")));
    range.put_Item(COleVariant((long)6),COleVariant((long)5),COleVariant(_T("老师讲课加实验")));

//range.put_Item(COleVariant((long)7),COleVariant((long)2),COleVariant(_T("电力系统")));
    //range.put_Item(COleVariant((long)7),COleVariant((long)3),COleVariant(_T("50")));
    //range.put_Item(COleVariant((long)7),COleVariant((long)4),COleVariant(_T("难")));
    //range.put_Item(COleVariant((long)7),COleVariant((long)5),COleVariant(_T("老师讲课加实验")));

range.AttachDispatch(sheet.get_UsedRange());//加载已使用的单元格
    range.put_WrapText(COleVariant((long)1));   //设置文本自动换行

//5.设置对齐方式
    //水平对齐:默认 1 居中 -4108, 左= -4131,右=-4152
    //垂直对齐:默认 2 居中 -4108, 左= -4160,右=-4107
    range.put_VerticalAlignment(COleVariant((long)-4108));
    range.put_HorizontalAlignment(COleVariant((long)-4108));
    //6.设置字体颜色
    CFont0 ft;
    ft.AttachDispatch(range.get_Font());
    ft.put_Name(COleVariant(_T("楷体"))); //字体
    ft.put_ColorIndex(COleVariant((long)1));//颜色    //黑色
    ft.put_Size(COleVariant((long)12));     //大小

range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")),COleVariant(_T("E2"))),TRUE);
    ft.AttachDispatch(range.get_Font());
    ft.put_Name(COleVariant(_T("华文行楷")));
    ft.put_Bold(COleVariant((long)1));
    ft.put_ColorIndex(COleVariant((long)5));    //颜色    
    ft.put_Size(COleVariant((long)18));         //大小
    Book.SaveCopyAs(COleVariant(strExcelFile)); //保存

Book.put_Saved(TRUE);
    //8.释放资源
    range.ReleaseDispatch();
    sheet.ReleaseDispatch();
    sheets.ReleaseDispatch();
    Book.ReleaseDispatch();
    Books.ReleaseDispatch();
    App.ReleaseDispatch();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
5. 最终效果

图6
四、基本原理介绍
一般操作Excel步骤
创建一个Excel应用程序 app
得到Workbooks容器
打开一个workbook或者创建一个workbook
得到workbook的worksheets容器
打开一个worksheet或者创建一个worksheet
通过Range对worksheet里的单元格进行读写操作。
保存Excel释放资源
五、参考文献
http://blog.csdn.net/xiaoxiangyuan123456/article/details/70941588 
http://m.blog.csdn.net/Augusdi/article/details/5782575
--------------------- 
作者:ywx123_ 
来源:CSDN 
原文:https://blog.csdn.net/ywx123_/article/details/77074038 
版权声明:本文为博主原创文章,转载请附上博文链接!

VS2010 对Excel读写操作相关推荐

  1. VS2010 对Excel读写操作

    VS2010对Excel读写操作 一.开发环境 编程环境 VS2010 office版本 office 2010 注意 :这里office版本号不一定非得和vs版本号一致. 二.基本实现功能 基本实现 ...

  2. VS2015 对Excel读写操作

    一.开发环境 编程环境 VS2015 office版本 office 2016 二.参考博文 VS2010 对Excel读写操作 https://blog.csdn.net/ywx123_/artic ...

  3. 实现EasyExcel对Excel读写操作

    实现EasyExcel对Excel读写操作 .pom中引入xml相关依赖 <dependencies><!-- https://mvnrepository.com/artifact/ ...

  4. php excel读写,phpGrace 工具类库 - excel 读写操作

    功能说明 excel 读写操作基于 PHPExecl 类库,可以方便的对 Excel 进行操作. 部署说明下载 PHPExcel.zip 解压后将全部文件部署到 phpGrace/tools 下 调用 ...

  5. 基于Python的Excel读写操作--内容超详细,值得排排坐

    今日份超详细的解读,Excel文件基础操作,让你以学就会. 写这个的原因是,一位群友问了很久,然后网上的教程写的又不是很详细,看的有些犯迷糊,所以我今日份写一份超详细的基本操作,让你打下良好的基础. ...

  6. 【开发指南】Spring Cloud集成POI完成Excel读写操作

    POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft office格式档案读和写的功能,其中包括Excel,Word,Power ...

  7. Python3,Pandas 5行代码实现对excel 读写操作

    Pandas 读写excel pandas 写入excel数据 pandas 读取excel数据 pandas 写入excel数据 在使用pandas之前,需要安装pandas模块, 老方法: pip ...

  8. csv文件操作、excel读写操作

    文章目录 1. csv 2. 虚拟环境 3. excel文件 4. excel写文件 1. csv csv文件 csv文件叫逗号分隔值文件 - 每一行内容是通过逗号来区分出不同的列 csv文件可以直接 ...

  9. matlab用excel的数据,使用MATLAB对excel文件数据的读写操作

    最近建模,刚好用matlab对excel中的数据进行处理,由于自己是个菜鸟,基本都是边问度娘边动手操作.感觉以后还会用得到,在此做个简单的总结,为下一次省点力... excel读写操作:xlsread ...

最新文章

  1. Composer 中国全量镜像(二)
  2. 腾讯2011.10.15校园招聘会笔试题
  3. [iBoard 电子学堂][第八卷 设计任意波发生器]第一篇 iBoard 任意波发生器简介
  4. .NET Core 学习资料精选:入门
  5. 使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK
  6. Mybatis解决jdbc编程的问题以及mybatis与hibernate的不同
  7. docker常见面试题_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
  8. 线上CPU100%排查
  9. STM32烧录HEX、BIN文件,使用ST-LINK
  10. 用java代码将从数据库中取出的具有父子关系的数据转成json格式
  11. unity怪物攻击玩家减血_Unity RPG游戏攻击的判定
  12. turbo c语言教程,turbo c语言教程(Turbo C language tutorial).doc
  13. [译文]GBAGuy的GBA ASM教材 第一章 概述
  14. PS 快捷键大全(psshortcut)
  15. html输入后面消失,excel输入减号为什么会消失
  16. 视频运动放大一:欧拉视频放大,《Eulerian video magnification for revealing subtle changes in the world》
  17. 项目实训—场景划分(一)
  18. 王兴的190条程序员技术人生的思考!
  19. handler中的handler.removecallbacks和handler.removemessages的用法
  20. 第一章 分布式计算概述

热门文章

  1. i5配置能运行matlab,matlab 仿真用什么cpu合适?
  2. C++001-初识C++与C++输出语句
  3. 更改repo的python版本
  4. 使用vuetify2.0的正确姿势
  5. DynamicFusion解析
  6. jsp+ssm计算机毕业设计大学生心理咨询网站【附源码】
  7. 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法
  8. 半导体——现代社会的基石
  9. 4. hda设备中的pcm文件(第四部分)
  10. C# 十进制和十六进制转换