博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC编程操作Excel
阅读量:4993 次
发布时间:2019-06-12

本文共 5681 字,大约阅读时间需要 18 分钟。

1.

建立VC工程,本章说明一般是针对MFC

2.

加入Excel的库文件.

从classwizard中add class处from type library,去office的安装目录下引入excel.exe(这是office 2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,加载库后会自动生成相应的接口头文件和源文件

Excel的对象模型        

Application:代表应用程序本身。即Excel应用程序        

Workbooks:是Workbook 的集合,代表了工作薄。        

Worksheets:是Worksheet的集合,是Workbook的子对象。        

Range:是Worksheet的子对象,可以理解为Sheet中一定范围的单元格。        

Shapes:是Worksheet的子对象,用于存储图片等信息的单元格

3.

初始化COM库.

在app的Initstance函数中添加始化代码:

4.

if(!AfxOleInit()) {    AfxMessageBox("无法初始化COM的动态连接库!");    return FALSE; }

不过在控制台程序中调用AfxOleInit()是无效的;

然后,创建Excel 服务器(启动Excel)

定义app的全局或成员变量

_Application app;if (!app.CreateDispatch("Excel.Application")){   AfxMessageBox("无法启动Excel服务器");   return FALSE;}

设置Excel的状态:

5.

app.SetVisible(bVisble); // 使Excel可见app.SetUserControl(bControl); // 允许其他用户控制Excel

VC对Excel的操作

定义变量

Workbooks  books;_Workbook  book;Worksheets  sheets;_Worksheet  sheet;LPDISPATCH  lpDisp;Range   range;COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

6.

打开已有的Excel文件

books.AttachDispatch(app.GetWorkbooks());   // 或者也可以   // books = app.GetWorkbooks();  lpDisp = books.Open("", covOptional, covOptional,  covOptional,   covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional);

7.

新建一个.xls文件,并写入数据

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);         // Get the Workbooks collection so that you can add a new workbook            books.AttachDispatch(app.GetWorkbooks());  // 得到Workbooks        book = books.Add(covOptional);     // 得到Workbook       // Get the Worksheets collection so that you can get the IDispatch for the first Worksheet       sheets = book.GetWorksheets();     // 得到Worksheets       sheet = sheets.GetItem(COleVariant((short)1)); // 得到Worksheet              // 分别向每个单元格添加数据       // Excel2000 用函数SetValue()即可, Excel2003用函数SetValue2()      //      range  = sheet.GetRange(COleVariant("A1"), covOptional);  // 获取A1 Range      range.SetValue2( COleVariant("Date"));                               // 添加数据      range = sheet.GetRange(COleVariant("B1"), covOptional);   // 获取B1 Range     range.SetValue2(COleVariant("Order"));                               // 添加数据     range = sheet.GetRange(COleVariant("C1"), covOptional);   // 获取C1 Range     range.SetValue2(COleVariant("Amount"));                            // 添加数据     range = sheet.GetRange(COleVariant("D1"), covOptional);   // 获取D1 Range     range.SetValue2(COleVariant("Tax"));                                   // 添加数据           // 向单元格中添加公式    range = sheet.GetRange(COleVariant("D2"), covOptional);      // 获得D2 Range     range = range.GetResize(COleVariant((long)NUMROWS), COleVariant((long)1)); // 重新设置D2的大小    range.SetFormula(COleVariant("=C2*0.07"));                         // 给D2:D21设置公式       // 设置单元格的格式      range = sheet.GetRange(COleVariant("A1"), COleVariant("D1")); // 获得A1:D1的Range      oFont = range.GetFont();                                                              // 获得Range的字体      oFont.SetBold(COleVariant((short)TRUE));                                    // 设置是否粗体      oFont.SetColor(COleVariant((long)RGB(255, 0, 0)));                     // 设置字体颜色      oFont.SetName(COleVariant("黑体"));                                           // 设置字体类型     rang.SetNumberFormatLocal(COleVariant("@"));     //设置单元格为文本,赋值前有效      range = range.GetEntireColumn();                                                // 获得全部的单元格      range.AutoFit();                                                                            // 自动适合尺寸

8.

合并单元格

// 思路:1.先获取A1:C1的Range范围,然后重新定义此范围,最后合并      //          2.直接获得A1:C2的Range范围,直接合并。结果和第一种方法一样        Range unionRange;       unionRange = sheet.GetRange(COleVariant("A1"), COleVariant("C1"));        vResult = unionRange.GetMergeCells();        unionRange = unionRange.GetResize(COleVariant((long)2), COleVariant((long)3));        unionRange.Merge(COleVariant((long)0));      //合并单元格        unionRange.SetRowHeight(COleVariant((short)30));   //设置单元格的高度        unionRange.SetHorizontalAlignment(COleVariant((long)-4108));// 水平居中对齐

9.

向单元格中插入图片(支持BMP、JPG格式,其他没试)

Shapes   shapes   =   sheet.GetShapes();       // 从Sheet对象上获得一个Shapes        range   = sheet.GetRange(COleVariant("B16"),COleVariant("J22"));    // 获得Range对象,用来插入图片           rgMyRge1 = range;   shapes.AddPicture("D://Test1.jpg"   ,   false   ,   true   ,                                     (float)range .GetLeft().dblVal, (float)range .GetTop().dblVal,     // 从本地添加一个图片                                  (float)range .GetWidth().dblVal, (float)range .GetHeight().dblVal);   ShapeRange   sRange   =   shapes.GetRange(_variant_t(long(1)));   sRange.SetHeight(float(30));      sRange.SetWidth(float(30));

10.

将已建的.xls文件另存为

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    book.SaveAs(COleVariant("D://3.xls"),covOptional,covOptional,                                covOptional,covOptional,covOptional,0,                                covOptional,covOptional,covOptional,covOptional,covOptional);

11.

关闭Excel服务

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    book.SetSaved(TRUE);     // 将Workbook的保存状态设置为已保存,即不让系统提示是否人工保存    range.ReleaseDispatch();    // 释放Range对象    sheet.ReleaseDispatch();    // 释放Sheet对象    sheets.ReleaseDispatch();    // 释放Sheets对象     book.ReleaseDispatch();     // 释放Workbook对象    books.ReleaseDispatch();    // 释放Workbooks对象    book.Close (covOptional, covOptional,covOptional);// 关闭Workbook对象    books.Close();           // 关闭Workbooks对象        app.Quit();          // 退出_Application    app.ReleaseDispatch ();       // 释放_Application

 

转载于:https://www.cnblogs.com/guobbs/p/3549404.html

你可能感兴趣的文章
【转】hibernate缓存:一级缓存和二级缓存
查看>>
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>
vsCode 改变主题
查看>>
【vijos】【树形dp】佳佳的魔法药水
查看>>
聚合新闻头条
查看>>
Ubuntu 关闭锁屏界面的 on-screen keyboard
查看>>
凸优化学习笔记
查看>>
使用ehcache-spring-annotations开启ehcache的注解功能
查看>>
Charles设置HTTPS抓包
查看>>
NGUI出现Shader wants normals, but the mesh UIAtlas doesn't have them
查看>>
Boost.Asio c++ 网络编程翻译(14)
查看>>
Codeforces Round #306 (Div. 2) D.E. 解题报告
查看>>
uva 1557 - Calendar Game(博弈)
查看>>
HDU1051 Wooden Sticks 【贪婪】
查看>>
十大经典数据挖掘算法
查看>>