VC编程操作word2010生成表格
作者:朱金灿
来源:http://blog.csdn.net/clever101
一. 右键单击工程节点,然后选择添加类,如下图:
二. 添加TypeLib中的MFC类,如下图:
三. 选择文件,打开MSWORD.OLB, word2010的在Office14的文件夹下,如下图:
四. 生成所有的接口类代码,如下图:
五. 生成表格的代码如下:
void CMFCDlgDlg::OnBnClickedButton1()
{
CApplication oWordApp;
CDocuments oDocs; CDocument0 oDoc; CRange range; CParagraph paragraph; CParagraphs paragraphs; CCell cell; CCells cells; CTable0 table; CTables0 tables; CBorder border; CBorders borders; CFont0 font; CPageSetup pagesetup; //2.创建和连接word对象,初始化连接,判断当前系统是否有word进程,然后然后创建或连接对象 LPDISPATCH pDisp; LPUNKNOWN pUnk; CLSID clsid; CLSIDFromProgID(L"Word.Application",&clsid); if(GetActiveObject(clsid,NULL,&pUnk)==S_OK)
{
pUnk->QueryInterface(IID_IDispatch,(void **)&pDisp);
oWordApp.AttachDispatch(pDisp);
}
else
{
if(!oWordApp.CreateDispatch("Word.Application"))
{
AfxMessageBox("创建Word服务失败!");
}
} //初始化文档,生成WORD表格
oWordApp.m_bAutoRelease=true;
BeginWaitCursor(); oDocs=oWordApp.get_Documents(); COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);//加新文档 pagesetup=oDoc.get_PageSetup(); pagesetup.put_Orientation(1); //横向 paragraphs=oDoc.get_Paragraphs(); paragraph=paragraphs.get_Last();//以当前段落最后一行为表起始位置 range=paragraph.get_Range();
//添加制作新表格 tables=oDoc.get_Tables(); int nBhCount=3;
table=tables.Add(range,5+nBhCount,6,vOpt,vOpt);
borders=table.get_Borders();
borders.put_Enable(1); //显示表框 range=table.get_Range(); cells=range.get_Cells(); cells.put_VerticalAlignment(1);//文字居中 #define DOC_TABLE1_WIDTH 60 cells.SetWidth(DOC_TABLE1_WIDTH,1); cell=table.Cell(1,1);//合并第一行的三列 cell.Merge(table.Cell(1,6));
range=cell.get_Range(); range.put_Bold(1);
range.put_Text(" 病害统计信息"); //居中 cell=table.Cell(2,1); cell.Merge(table.Cell(2,2));
range=cell.get_Range(); range.put_Bold(1);
range.put_Text("组成材料"); cell=table.Cell(2,2); cell.Merge(table.Cell(2,4));
range=cell.get_Range();
range.put_Bold(1); range.put_Text("病害种类"); cell=table.Cell(2,3);
range=cell.get_Range();
range.put_Bold(1);
range.put_Text("病害总数"); for(int iBh=0;iBh<nBhCount;iBh++)
{
cell=table.Cell(2+iBh+1,1);
cell.Merge(table.Cell(2+iBh+1,2));
range=cell.get_Range();
range.put_Bold(0);
range.put_Text("hello1");
cell=table.Cell(2+iBh+1,2);
cell.Merge(table.Cell(2+iBh+1,4));
range=cell.get_Range();
range.put_Bold(0);
range.put_Text("hello2");
cell=table.Cell(2+iBh+1,3);
range=cell.get_Range();
range.put_Bold(0);
range.put_Text("hello3");
} cell=table.Cell(3+nBhCount,1);//合并列
cell.Merge(table.Cell(3+nBhCount,6));
range=cell.get_Range();
range.put_Bold(1);
range.put_Text(" 等级统计信息");
for(int iCol=1;iCol<=6;iCol++)
{
cell=table.Cell(3+nBhCount+1,iCol);
range=cell.get_Range();
range.put_Bold(1);
range.put_Text("hello4");
cell=table.Cell(3+nBhCount+2,iCol);
range=cell.get_Range();
range.put_Bold(0);
range.put_Text("hello5");
} //保存,清理
CString strSave= "E:\\doc\\test.doc";
COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
CDocument0 oActiveDoc;
oActiveDoc = oWordApp.get_ActiveDocument(); oActiveDoc.SaveAs(COleVariant(strSave),COleVariant((short)0), vFalse, COleVariant(""), vTrue,COleVariant(""),vFalse, vFalse, vFalse, vFalse, vFalse, vOpt,vOpt,vOpt,vOpt,vOpt); oWordApp.put_Visible(true); oWordApp.ReleaseDispatch(); //退出WORD EndWaitCursor();
}
效果图如下:
参考文献:
VC编程操作word2010生成表格的更多相关文章
- Aspose.Words操作word生成PDF文档
Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...
- 积累的VC编程小技巧之按钮
1.资源种创建的控件,对其属性的动态控制: 在对话框类的头文件里创建所要改变属性的控件的对象,如要改变一个Button(其ID为IDC_MyButton)的属性,则需创建Cbutton的对象m_but ...
- SpringBoot使用WebFlux响应式编程操作数据库
这一篇文章介绍SpringBoot使用WebFlux响应式编程操作MongoDb数据库. 前言 在之前一篇简单介绍了WebFlux响应式编程的操作,我们在来看一下下图,可以看到,在目前的Spring ...
- VBA操作word生成sql语句
项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1.可以生成一个html或者xml,检索结构生成sql.但是这个方式也蛮麻烦 2.查到vba可以操作w ...
- JS动态生成表格后 合并单元格
JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...
- VC++文件操作之最全篇
一.剖析VC中的文件操作 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分 ...
- vue+element创建动态的form表单.以及动态生成表格的行和列
动态创建form表单,网上有插件 (form-create) 不过我不知道它怎么用,没有使用成功,如果你使用成功了,欢迎下方留言. 最后我使用了笨方法,针对各个表单写好通用的组件,然后根据type用v ...
- javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行
jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...
- VC++ 字符串操作学习总结
vc++中各种字符串(转载) http://www.cnblogs.com/tomin/archive/2008/12/28/1364097.html CString ,BSTR ,LPCTSTR之间 ...
随机推荐
- [转] docker 部署 odoo
[From] https://blog.csdn.net/qq_36178641/article/details/79775153 1.安装大象数据库. docker run -d -e POSTGR ...
- grep练习
1.查找特定字符串 [root@server3 mnt]# cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/no ...
- CDH集群安装配置(二)- 公共环境的配置和虚拟机的克隆
1. 配置网络-ip地址设置静态 vi /etc/sysconfig/network-scripts/ifcfg-eth33 增加如下配置 ONBOOT=yes BOOTPROTO=static IP ...
- Ionic3,装饰器(@Input、@ViewChild)以及使用 Events 实现数据回调中的相关用法(五)
标题栏的渐变效果 使用到的相关装饰器.Class以及相关方法:@Input.@ViewChild.Content.ionViewDidLoad ① @Input 装饰器:用来获取页面元素自定义属性值. ...
- maxscript批量设置摄像机并保存渲染图
代码可直接运行 fn renderr = ( a=box() --新建一个立方体 ambientcolor = (color ) --设置环境光(搞不太懂,白的不出错就行) to do ( dis = ...
- DataAdapter对象
DataAdapter对象在物理数据库表和内存数据表(结果集)之间起着桥梁的作用.它通常与DataTable对象或DataSet对象配合来实现对数据库的操作. DataAdapter对象是一个双向通道 ...
- jquery清空下拉框,保留第一个
js中可以document.getElementById("id").options.length = 1;设置 jquery中的设置方法:$("#id option[i ...
- Linux中常用头文件的作用--转
http://blog.sina.com.cn/s/blog_5c93b2ab0100q62k.html 1. Linux中一些头文件的作用: <assert.h>:ANSI C.提供断言 ...
- JVM(一)
Java 环境 Java 运行过程 下面几张图,我们可以了解到 Java 这门语言是如何进行运行的. java文件通过编译器编译成class文件,然后在虚拟机中转化为机器语言运行在机器上. 上图展示了 ...
- spring整合struts2和hibernate
1.spring 1.1 jar包 1.2 spring.xml <?xml version="1.0" encoding="UTF-8"?> &l ...