如何用VC在Word中添加、操作表格
如何用VC在Word中添加、操作表格
,VC在WORD中加入文本数据;进行word写的VBA宏代码VC++会自动地在WordAutomation.cpp中的CWordAutomationApp::InitInstance()中生成如下的代码,使得COM的服务能有效。
if (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}// TODO: Add your command handler code hereCOleVariant vTrue((short)TRUE),vFalse((short)FALSE),vTmp,vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//创建Word实例_Application oWordApp;if (!oWordApp.CreateDispatch("Word.Application", NULL)){AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);return;}Range Rng;Table Tbl;Tables Tbls;//创建一个新的word文档Documents oDocs;_Document oDoc;oDocs = oWordApp.GetDocuments();oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);//如果是word 98,则应该带两个参数,如oDocs.Add(vOpt, vOpt)//把文本添加到word文档Selection oSel;oSel = oWordApp.GetSelection();oSel.TypeText("one");oSel.TypeParagraph();oSel.TypeText("two");oSel.TypeParagraph();oSel.TypeText("three");//保存word文档_Document oActiveDoc;oActiveDoc = oWordApp.GetActiveDocument();oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"),COleVariant((short)0),vFalse, COleVariant(""), vTrue, COleVariant(""),vFalse, vFalse, vFalse, vFalse, vFalse,vFalse,vFalse,vFalse,vFalse,vFalse);//退出word应用程序//oWordApp.Quit(vOpt, vOpt, vOpt);二,用VC在WORD中加入表格;COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vTmp,vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//创建Word实例_Application WrdApp;if (!WrdApp.CreateDispatch("Word.Application", NULL)){AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);return;}Documents Docs;_Document Doc;Range Rng;Table Tbl;Tables Tbls;//创建新文档Docs = WrdApp.GetDocuments();Doc = Docs.Add(vOpt, vOpt, vOpt, vOpt);Rng=Doc.GetContent();//{{Tbls=Doc.GetTables(); 必须给这个变量初始化//}}Tbls.Add(Rng,5,5,vOpt,vOpt);/。
vc操作Word
vc操作Word1、如何用VC将word表格中插入一行Tables tbs=doc.GetTables();Table tb;Rows rs;tb=tbs.Item(1);//取第一个表格rs=tb.GetRows();COleVariantcovOptional((long)DISP_E_PARAMNOTFOUNT,VT_ERRPR);//最主要是这句,实在太感谢了rs.Add(covOptional);//增加一行2、设置字体的样式和字体大小Range wordRange= wordDoc.Range(&varOptional, &varOptional);Selection wordSelec = wordApp.GetSelection();_Font oFont;_ParagraphFormat wordFormat;//////////////设置标题////////////////////////////////////////wordSelec.HomeKey(&varUnit, &varOptional);oFont = wordSelec.GetFont();oFont.SetSize(15);oFont.SetName("黑体");wordFormat = wordSelec.GetParagraphFormat();wordFormat.SetAlignment(1);wordSelec.InsertAfter("力学试验机实验报告");wordSelec.InsertParagraphAfter();wordSelec.EndKey(&varUnit, &varOptional);////////////标题设置完毕/////////////////////////////////////3、在word 中插入表格Range rng;Tables tabs;Table tab;Selection sSel;_Document sDoc;先获得word文档对象,然后就可以对其进行操作了rng =sSel.GetRange();tabs.Add(rng,3,9,vOne,vTwo);//绘制3行9列表格tabs = sDoc.GetTables();tab = tabs.Item(2);for(int i=0;i<9;i++)向表格的第一行的每一个格中添加数据{cel = tab.Cell(1,i+1);rng = cel.GetRange();rng.SetText("长度");}4、过以标签的方式向word写数据Documents oDocs;_Document oDoc;Windows oWindows;Window oWindow;COleVariant tem1,m_olevariant(short(1),VT_I2); COleVariant m_variant1,m_variant2;oWordApp.SetVisible(true);/*******************通过标签设置数据**********************/ Bookmarks bookmarks;Bookmark bookmark;Range range;m_pathname = "c:\\报告样式.doc";COleVariant dot(m_pathname);oDocs=oWordApp.GetDocuments();oWindows=oWordApp.GetWindows();oDoc=oDocs.Add(&dot,&vOpt,m_variant1,m_variant2);oWordApp.Activate();bookmarks=oDoc.GetBookmarks();oWindow=oWindows.Item(m_olevariant);//设置标题tem1.SetString("CompanyName",VT_BSTR);bookmark=bookmarks.Item(&tem1);range=bookmark.GetRange();oWindow.ScrollIntoView(range,&m_olevariant);//要滚动视图是用这句吗?range.SetText("中国四方利通");5、用vc将图片插入word的指定位置下代码,但它总是将图片插在文档的最开始,我在文档中设置了标签“test”,请问怎样将图片插入word中指定的位置?Selection oSel;oSel = oWordApp.GetSelection();InlineShapes shps;//插入图片到指定的位置shps=oSel.GetInlineShapes();shps.AddPicture("C:\\1.jpg",vFalse,vTrue,vOpt);你必须先获得插入位置的range对象,然后addpicture的最后一个参数用range对象替换,就可以了怎样取某doc文档里的第一段和最后一段的内容Paragraphs pg;pg.GetFirst();//取第一段pg.GetLast();。
VC++的Word文档中的表与图自动生成技术
THANKS
感谢观看
可扩展性好
VC自动生成技术可以与其他 技术和工具进行集成,实现 更复杂的文档自动化处理任 务。
易于维护
VC自动生成技术使用标准的 编程语言和接口,易于维护 和扩展。
04 表格自动生成技 术
表格数据读取与解析
数据源选择
确定表格数据来源,可以是数据库、Excel、CSV文件等。
数据读取
使用相应的库或API读取数据源中的数据。
案例二
某学术研究机构需要定期发布研究成果,其中包括大量的实验数据和统计分析图表。借助 VC的Word文档中的表与图自动生成技术,该机构能够快速地将实验数据转化为美观且易 于理解的表格和图表,为学术交流和成果展示提供了便利。
案例三
某教育机构需要为学生制作课程教材和辅导资料,其中包含大量的知识点、案例分析和图 表。通过VC的Word文档中的表与图自动生成技术,该机构能够高效地制作出内容丰富、 形式多样的教材和资料,提升了教学质量和学生学习体验。
数据解析
将读取的数据按照一定格式进行解析,例如将数据转换为二维数 组或自定义的数据结构。
表格样式定义与生成
样式定义
根据需求定义表格的样式,包括表格边框、背景色、字体、对齐 方式等。
样式应用
将定义的样式应用到解析后的数据上,生成带有样式的表格数据。
表格生成
使用Word库或API将带有样式的表格数据生成Word中的表格对象 。
利用编程语言(如VC)提供的库和接口, 编写程序实现Word文档中表和图的自动生 成。
基于第三方库的生成技术
基于人工智能的生成技术
借助第三方库(如OpenXML SDK、DocX 等),在VC环境中实现Word文档的自动化 生成。
使用VC++操作Excel文件(OLE)
使用VC++操作Excel文件(OLE)使用VC++操作Excel文件 - [程序设计]2008-07-17博主ps:在上看到的这篇文章,但是由于这篇文章写得比较早,有些地方在office2007的情况下稍有出入。
所以改动了一点。
本文档适用于:•Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0 以上•Microsoft OLE 库第一步:建立一个自动化工程1.启动VC 6.0,打开新建对话框,新建一个MFC AppWizard(exe)工程,这里工程明设置为TestExcel。
2.进入MFC 应用程序向导,选择基本对话框,直接点击完成:3.打开MFC ClassWizard窗口(查看—>建立类向导),选择Automation,单击Add Class按钮,选择From a type library...,弹出文件选择对话框,之后定位到Microsoft Office的安装目录(通常为C:\Program Files\Microsoft Office\Office12),选择EXCEL.exe,确定后,弹出Confirm Classes窗口,选择列表中的所有类,单击OK 按钮。
注意原来文章里说的文件名是EXCEL9.OLB,因安装的Office版本不同而有所差异,EXCEL9.OLB对应的是Microsoft Office 2000,微软命名方式为Excel+数字的形式,Office版本越高,数字越大。
在我用的office2007里直接用的exe文件4.返回编辑器,查看工程文件,可发现多了EXCEL.H及EXCEL.CPP两个文件。
5.打开stdafx.h头文件确保包含如下头文件:#include <afxdisp.h>#include "excel9.h"6.打开TestExcel.cpp文件,修改CTestExcelApp::InitInstance(),加入如下代码:BOOL CTestExcelApp::InitInstance(){if( !AfxOleInit() ){AfxMessageBox("初始化Ole出错!");return FALSE;}AfxEnableControlContainer();............return FALSE;}为保证编译时不产生重复定义错误,打开excel9.h文件,在文件开始位置加入如下代码:#if !defined _HEAD_FILE_EXCEL9_#define _HEAD_FILE_EXCEL9_相应的,在文件末尾加入:#endif到此,OLE自动化工程建立完成。
VC 中操作word
VC 中操作word 第一步在函数InitInstance() 中加入如下代码1.如果是word 2003if ( CoInitialize(NULL) !=0 ){AfxMessageBox("初始化COM支持库失败");exit(1);}如下图如果是word 2007 ,加入如下代码:if(TRUE != AfxOleInit()){AfxMessageBox("初始化COM支持库失败");exit(1);}如下图第二步3.打开ClassWizard—Add Class—From a type library,选择本机word8.OLB文件(最好先查找一下该文件,word2000为Word9.0LB,office2007 为MSWORD.OLB 一般在安装目录Microsoft Office\Office12 下)。
选择Application、Documents、Document、Window、View 、Range、Bookmarks、Bookmark、Fields、FieId加入新类、头文件word.h、源文件word.cpp。
如下图经过以上的添加后,在系统的存放代码文件的目录下会多出两个文件msword.cpp msword.h。
同时在VC 环境下查看类会发现多出了刚才添加的word里面的一些类,如下图所示打开对应的头文件,在文件的头部添加:#include "comdef.h"#include <AtlBase.h>#include <windows.h>第三步设计模板,准备一个word的模板,即*.dot格式的word文件,可以用word自己创建一个。
在word中用户随意设计好报表的格式,并在相应需要程序修改的位置插入书签,书签用于将程序中想要输出变量的值带入模板中,模板中的书签名字一定要与程序中的一致,笔者建议将程序中变量的名字做为书签。
visual,stdio20XX,插入表格教程
竭诚为您提供优质文档/双击可除visual,stdio20XX,插入表格教程篇一:visualstudio20xx安装配置教程安装、配置和首次使用Vs20xx关于传说中的c语言这一回事,非计算机专业的同学可以只需要使用tc或者是Vc6.0来编程,但作为计算机业内的同学我们有必要使用功能更强大,bug更好的编译工具,这里我教大家如何安装和使用微软公司新的编译工具Visualstdio20xx。
这里将帮助大家安装Visualc++20xx,帮助大家做一些常见的配置,以及第一次使用它来写helloword程序。
安装Visualc++20xx是属于Visualstudio20xx的一部分,实际上Visualc++20xx也有更多的子版本,正如windows7有旗舰版、家庭高级版、家庭初级版一样。
如果你下载完毕了,一般情况下是一个iso镜像文件,这里我就就拿Vs20xx旗舰版(大小为2.5g)为例给大家作一下讲解。
这就是光盘镜像文件,我们有多种方式可以安装它,你可以把它烧录成光盘,也可以用虚拟光驱软件安装它,由于这个iso已经被修改过了,你甚至可以直接解压它,然后运行里面的setup.exe进行安装。
Vs20xx旗舰版可用key:ycFhq9dwcydkV88t2tmhg7bhp方法1:这里我们就直接解压它。
不解释…方法2:或者我们通过虚拟光驱加载刚才下载好的iso镜像:在弹出的对话框中选择我们下载好的iso文件。
这个时候,虚拟光驱里面已经替我们打开了iso文件,有的机器可能会自动弹出安装提示,有的不会。
如果自动弹出安装提示,那么直接通过即可,如果没有弹出,那么用资源管理器方式进入虚拟光驱点击setup.exe即可开始安装。
由于我已经安装好了Vs20xx,所以接下来无法给大家截图了,我就直接用文字描述吧。
当弹出Vs20xx安装程序之后点下一步,然后我们可能会看到完全最小自定义这样的选项,我推荐大家选择自定义,因为只有这样我们才可以自定我们安装的目录。
C#将excel表格嵌入到Word中
C#将excel表格嵌⼊到Word中C# 将excel表格嵌⼊到Word中继续开扒,今天要实现的是使⽤C#将excel表格嵌⼊到Word中这个功能,将word表格导⼊到excel中我已经写过了,如有需要可参考我之前的⽂章,在开始前还有⼀点需要指出的是在我的这个⽰例中是将excel表格转换为图⽚,然后再嵌⼊⾄Word⽂档中。
为了展⽰⼀下效果,我做了⼀个简单的excel表格,请看源excel⼯作表截图:下⾯看看如何使⽤代码:第⼀步:新建⼀个Visual C#控制台项⽬,添加引⽤并使⽤如下命名空间:using System.Drawing;using Spire.Doc;using Spire.Doc.Documents;using Spire.Doc.Fields;using Spire.Xls;第⼆步:创建⼀个ConvertExcelToImage(string excelFile)⽅法,将excel的⼯作表转换为图⽚。
static Image ConvertExcelToImage(string excelFile){//创建⼀个excel workbook对象Workbook workbook = new Workbook();//加载excel⽂件workbook.LoadFromFile(excelFile);//获取第⼀个⼯作表Worksheet sheet = workbook.Worksheets[0];//获取第⼀个⼯作表的最后⼀⾏int lastRow = stRow;//获取第⼀个⼯作表的最后⼀列int lastColumn = stColumn;//将第⼀个⼯作表转换为图⽚Image image = workbook.Worksheets[0].SaveToImage(1, 1, lastRow, lastColumn);return image;}第三步:在主函数内,新建⼀个word⽂档对象,并给它添加⼀个section和段落。
VC中进行office编程的-操作word
VC中进行office编程的-操作word,可以设置文字的样式,新建表格,这里提供给大家一个类--CWzjWordOffice::CWzjOffice类,用来对WORD进行简单的操作。
正文大家先看一下CWzjWordOffice类怎么使用CWzjWordOffice wd; //定义一个操作word的对象wd.Create(); //创建一个word应用程序增加一个文档wd.SetFont(25,"魏碑",RGB(128, 0, 0)); //设置字体(字号,字体名,颜色)wd.SetFont(1,0,0); //设置字体为粗体,不是斜体,没有下划线wd.SetParaphformat(1); //设置文字为居中对齐wd.WriteText("软件工程成绩"); //写文字wd.m_wdSel.TypeParagraph(); //回车换行//设置表格字体wd.SetFont(9,"宋体");wd.SetFont(0,0,0);wd.CreateTable(2,4); //创建一个2行4列的表格wd.WriteCellText(1,1,"学号"); //往1行1列单元写“学号”wd.WriteCellText(1,2,"姓名"); //往1行2列单元写“姓名”wd.WriteCellText(1,3,"年龄"); //...wd.WriteCellText(1,4,"省份");wd.WriteCellText(2,1,"23020723");wd.WriteCellText(2,2,"汪自军");wd.WriteCellText(2,3,"25");wd.WriteCellText(2,4,"湖北");wd.ShowApp(); //显示word后面是效果图。
VC 2010操作Word2010
VC 2010操作Word20101.创建MFC工程,非Unicode。
2. 添加Word的类库添加所有的接口,可以作为一个文件夹,以后再使用只要加入该文件夹就可以了。
由于函数命名冲突,需要在生成的头文件中做相应处理,即://#import “C:\\Program Files\\MicrosoftOffice\\Office14\\MSWORD.OLB“ no_namespace #import “C:\\Program Files\\MicrosoftOffice\\Office14\\MSWORD.OLB“ no_namespace\raw_interfaces_only \ rename(“FindText“, “_FindText“) \ rename(“Rectangle“, “_Rectangle“)\ rename(“ExitWindows“, “_ExitWindows“)对于不同版本的office,其默认的类型库位置如下表所示:Office 版本路径 Office2003 C:\Program Files\Microsoft Office\Office11 Officexx C:\Program Files\Microsoft Office\Office12 Office xx C:\Program Files\Microsoft Office\Office14 Office xx C:\Program Files\Microsoft Office\Office15 特别的,wordxx在vcxx下必须手动指定类型库文件位置。
3.在stdafx中添加调用的头文件 #include“Wordxx/CApplication.h“// word程序对象 #include“Wordxx/CDocuments.h“// 文档集对象 #include“Wordxx/CDocument0.h“// 单个docx对象 #include “Wordxx/CSelection.h“// 该对象代表窗口或窗格中的当前所选内容,使用率最高#include “Wordxx/CCell.h“// 表格单元格#include “Wordxx/CCells.h“// 表格单元格集合 #include “Wordxx/CRange.h“// 该对象代表文档中的一个连续范围#includ e “Wordxx/CTable0.h“// 单个表格 #include “Wordxx/CTables0.h“// 表格集合 #include“Wordxx/CFont0.h“// 字体 #include“Wordxx/CParagraphs.h“// 段落集合 #include“Wordxx/CParagraphFormat.h“// 段落样式 #include “Wordxx/CParagraph.h“// 单个段落 #include“Wordxx/CnlineShape.h“// Inlin e图形对象集合 #include “Wordxx/CnlineShapes.h“// 单个Inline图像对象 #include “Wordxx/CRow.h“// 单个行#include “Wordxx/CRows.h“// 行集合#include “Wordxx/CFields.h“ #include“Wordxx/CPane0.h“// 页眉等设置 #include“Wordxx/CWindow0.h“// 页眉等设置 #include“Wordxx/CView0.h“// 页眉等设置 #include“Wordxx/CPageSetup.h“// 页面设置4.注销每个引入的头文件的import行 //#import“C:\\Program Files\\MicrosoftOffice\\Office14\\MSWORD.OLB“ no_namespace 不过如果使用wdMove等参数的话,只需要在CApplication.h文件中改为://#import “C:\\Program Files\\MicrosoftOffice\\Office14\\MSWORD.OLB“ no_namespace #import“C:\\Program Files\\MicrosoftOffice\\Office14\\MSWORD.OLB“ no_namespace\raw_interfaces_only \ rename(“FindText“, “_FindText“) \ rename(“Rectangle“, “_Rectangle“)\ rename(“ExitWindows“, “_ExitWindows“)否则,如果没有上面一段,则报错提示为(即全部头文件都注销import的情况下):但是上述的方法会带来一个问题,就是当word版本改变时会出现问题,解决办法就是上述报错的变量都用其数值代替就不会有问题了(写代码时可以加上用以查看wdMove等变量的值),如下面一些: wdAlignParagraphLeft = 0 wdAlignParagraphCenter =1 wdAlignParagraphRight =2 wdAlignParagraphJustify =3 wdParagraph =4 wdMove = 0 wdStyleHeading1 =2));// 设置为“标题1“样式,wdStyleHeading1=-2 // 设置选择区域字体,一定要放在样式后,否则格式会被样式的覆盖CFont0 font = wordSelection.get_Font();font.put_Name(_T(“微软雅黑“)); font.put_Size(16);// 必须选择该行才可以修改,即必须有HomeKey那行 // 获得当前段落,并设置对齐方式 CParagraph lastPara = GetCurParagraph(docx); lastPara.put_Alignment(1);// wdAlignParagraphLeft=0, wdAlignParagraphCenter=1,wdAlignParagraphRight=2 // 结束当前段落编辑,移动光标到段落后wordSelection.EndOf(COleVariant((short)4),COleVariant((short)0));// wdParagraph=4,wdMove=0 wordSelection.TypeParagraph(); // 新起一段 COleVariant covTime(_T(“yyyy-MM-dd:dddd“));// 时间格式可调整wordSelection.InsertDateTime(covTime, covFalse, covOptional, covOptional, covOptional);// 插入当前时间wordSelection.EndOf(COleVariant((short)4),COleVariant((short)0));// 结束当前段落编辑,wdParagraph=4,wdMove=0 // 生成表格 MakeRTITable( docx, wordSelection ); // 以下为为不同段落设置不同字体和对齐方式示例 wordSelection.TypeParagraph(); // 新起一段wordSelection.TypeText(_T(“end of the story!“)); wordSelection.HomeKey(COleVariant((short)5), COleVariant((short)1)); // wdLine=5,返回当前行首,并选择当前行 /*CFont0 */font = wordSelection.get_Font();font.put_Size(20);// 必须选择该行才可以修改,即必须有HomeKey那行 /*CParagraph */lastPara =GetCurParagraph(docx); lastPara.put_Alignment(3);// 右对齐wordSelection.EndOf(COleVariant((short)4),COleVariant((short)0));// 结束当前段落编辑,wdParagraph=4,wdMove=0 wordSelection.TypeParagraph(); // 新起一段wordSelection.TypeText(_T(“Thanks forreading!“)); wordSelection.HomeKey(COleVariant((short)5), COleVariant((short)1)); // wdLine=5,返回当前行首,并选择当前行 /*CFont0 */font = wordSelection.get_Font();font.put_Size(10);// 必须选择该行才可以修改,即必须有HomeKey那行font.put_Name(_T(“Times New Roman“));/*CParagraph */lastPara = GetCurParagraph(docx);lastPara.put_Alignment(1);// 居中对齐wordSelection.EndOf(COleVariant((short)4),COleVariant((short)0));// 结束当前段落编辑,wdParagraph=4,wdMove=0 // 插入分页符,用于换页wordSelection.InsertBreak(covOptional); // 插入公式,操作域 CFields fields = wordSelection.get_Fields(); COleVariant ofont = _variant_t(_T(“Times New Roman“)); COleVariant text = _variant_t(_T(“EQ \\a \\ar \\co2\\vs3 \\hs3(Axy,Bxy,A,B)“));// 注意要两个\\,一个转义后不对!!! fields.Add( wordSelection.get_Range(), covOptional, text, covFalse );wordSelection.HomeKey(COleVariant((short)5), COleVariant((short)1)); // wdLine=5,返回当前行首,并选择当前行 lastPara = GetCurParagraph(docx);lastPara.put_Alignment(0);// 左对齐wordSelection.EndOf(COleVariant((short)4),COleVariant((short)0));// 结束当前段落编辑,wdParagraph=4,wdMove=0 // 获取应用当前Debug路径 char fileName[MAX_PATH]; GetModuleFileName(NULL, fileName, MAX_PATH); char dir[260]; char dirver[100];_splitpath(fileName, dirver, dir, NULL, NULL); CString strAppPath = dirver; strAppPath += dir; //CString strAppPath = _T(“D:\\“); // ****************** 插入图片示例 ****************** // 需要CWindow0.h, CPane0.h, CView0.h wordSelection.TypeParagraph();// 另起一段CString strPicture = strAppPath + _T(“\\截图.jpg“); CnlineShapes nLineShapes =wordSelection.get_InlineShapes(); CnlineShape nLineshape = nLineShapes.AddPicture(strPicture, covFalse, covTrue, covOptional); // ****************** 设置页眉页脚****************** CWindow0 oWind =docx.get_ActiveWindow(); CPane0 oPane =oWind.get_ActivePane();// 一定将CPane改为CPane0或其他CView0 oView = oPane.get_View(); // =============== 设置页眉 =============== oView.put_SeekView(9);// wdSeekCurrentPageHeader=9 /*CFont0 */font = wordSelection.get_Font();// 设置选择区域字体font.put_Name(_T(“华文楷体“)); font.put_Size(16);/*CParagraphFormat */lastPara =wordSelection.get_ParagraphFormat();// 默认为居中lastPara.put_Alignment(1);// wdAlignParagraphLeft=0, wdAlignParagraphCenter=1, wdAlignParagraphRight=2 wordSelection.TypeText(_T(“网络大学“)); //=============== 设置页脚,包括页码 =============== oView.put_SeekView(10);// wdSeekCurrentPageFooter=10/*CFont0 */font = wordSelection.get_Font();// 设置选择区域字体,一定要放在样式后,否则格式会被样式的覆盖font.put_Name(_T(“华文楷体“)); font.put_Size(16);/*CParagraphFormat */lastPara =wordSelection.get_ParagraphFormat();// 默认为居中lastPara.put_Alignment(1);// wdAlignParagraphLeft=0, wdAlignParagraphCenter=1, wdAlignParagraphRight=2 // 添加页码wordSelection.TypeText(_T(“第页共页“)); wordSelection.MoveLeft( COleVariant((short)1), COleVariant((short)4), /*CFields */fields = wordSelection.get_Fields();fields.Add( wordSelection.get_Range(),COleVariant((short)33), COleVariant(“PAGE “), // 增加页码域,当前页码wordSelection.MoveRight( COleVariant((short)1), COleVariant((short)3),fields.Add( wordSelection.get_Range(),COleVariant((short)26), COleVariant(“NUMPAGES “), // 增加页码域,总页数 oView.put_SeekView(0);// 关闭页眉页脚,wdSeekMainDocument=0,回到主控文档 // Word程序可见,显示报表 //wordApp.put_Visible(TRUE); // 保存成果 CString strSavePath = strAppPath; strSavePath += _T(“\\报表.docx“); docx.SaveAs(COleVariant(strSavePath), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,covOptional); // 退出word应用docx.Close(covFalse, covOptional, covOptional); wordApp.Quit(covOptional, covOptional, covOptional); wordApp.ReleaseDispatch(); MessageBox(_T(“生成成功!“)); } } 表格插入函数MakeRTITable(CDocument0 nRowSize = nRowSize == 0 ?2 : nRowSize;// 表格至少两行 // new paragraph selection.TypeParagraph();// 新起一段 // Add table title selection.TypeParagraph();// 新起一段selection.TypeText(RTITableTitle); CParagraph lastPara = GetCurParagraph(oDoc);//lastPara.put_Alignment(wdAlignParagraphCenter);// 下面表格内容也受此控制//selection.EndOf(COleVariant((short)wdParagraph), COleVariant((short)wdMove)); lastPara.put_Alignment(1);// 下面表格内容也受此控制selection.EndOf(COleVariant((short)4),COleVariant((short)0)); // Add table CTables0 wordTables = oDoc.get_Tables(); CRange wordRange =selection.get_Range(); COleVariant covTrue((short)TRUE), covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CTable0 wordTable = wordTables.Add(wordRange, nRowSize , RTITableColumnSize, covTrue, covFalse); // 添加表格wordRange = wordTable.get_Range(); // Make header CCell cell; for ( int i=1; i<RTITableColumnSize+1; i++ ) { cell = wordTable.Cell(1, i); // 表格第一行第i列单元格 cell.Select();selection.TypeText(RTITableFieldArray[i-1]); }//selection.EndOf(COleVariant((short)wdStory), COleVariant((short)wdMove)); // 结束表格编辑selection.EndOf(COleVariant((short)6),COleVariant((short)0)); // 结束表格编辑 for ( int i=1;i<RTITableColumnSize+1; i++ ){ cell = wordTable.Cell(2, i); // 表格第一行第i列单元格cell.Select(); selection.TypeText(_T(“111.0“)); } //selection.EndOf(COleVariant((short)wdStory), COleVariant((short)wdMove)); // 结束表格编辑selection.EndOf(COleVariant((short)6),COleVariant((short)0)); // 结束表格编辑 // 合并单元格,需要注意的是,合并整行前不能有单元格的合并,否则无法获取表格的行信息 CRows rows; rows = wordTable.get_Rows();// 获取表格的行 CRow row; row = rows.Item(3);// 指向第三行 wordRange = row.get_Range(); CCells cells; cells = wordRange.get_Cells();// 得到该行所有单元格 cells.Merge();// 合并第三行为一列 cell =wordTable.Cell(4,1 ); cell.Merge( wordTable.Cell(5,1 ) );//合并第一列中的第四行与第五行 // 光标的移动方式.通过Selection类对象的方法对光标进行上下,左右等移动,实现对光标的定位功能 selection.MoveRight( COleVariant((short)1), COleVariant((short)1), COleVariant((short)0));// 向右移动鼠标到下一个字符selection.MoveDown( COleVariant((short)5), covOptional, covOptional );// 向下移动鼠标到下一行 COleVariantvUnit((short)RTITableColumnSize);// 光标移动方式为行COleVariant vCount((short)3); selection.Move( // 移动3行cells.Merge();// 合并第三行为一列 COleVariantvEnd((short)5); selection.EndKey( // 将光标移动到行尾 }自定义函数GetCurParagraph(CDocument0 CParagraph lastPara = paragraphs.get_Last(); return lastPara; }7.生成文档结果8.说明(1)关于设置页边距时的参数说明以缇为单位,一个与屏幕无关的单位,用来保证屏幕应用程序对屏幕元素的定位和比例在所有的显示系统上的一致性。
vc操作office
vc操作office下面是从CSDN上摘抄过来的,主要是今天调试VC操作Word2003的时候,网上下载的是操作Word 2000,但是参数已经有一些不同了。
下面的代码可以在2003中运行,记录在这里便于以后复习用。
感谢您使用微软产品。
对于您所提的问题,确实可以使用OLE Automation在VC++中对Word Object Model进行操作。
下面这篇知识库文章中给出了如何在VC_++中引入Office TypeLib,并通过程序启动MS Excel.参照这篇文章可以使您建立起程序的框架Q178749 HOWTO: Create Automation Project Using MFC and a Type Library /doc/b96834780.html,/support/kb/articles/q178/7/49.asp以下两篇知识库文章给出了具体的样例,如何操作Word和Excel. 您可以使用其中的方法来完成你自己的操作。
具体的对象模型的操作,您需要参见对应产品的VBA帮助文档。
Q178784 HOWTO: Use Automation to Open and Print a Word Document /doc/b96834780.html,/support/kb/articles/q178/7/84.aspQ179706 HOWTO: Use MFC to Automate Excel and Create/Format a New Workboo/doc/b96834780.html,/support/kb/art icles/q179/7/06.asp这两篇是介绍一些基础的知识以及Office 产品在Automation 上的一些支持以及常见问题。
您可以用作参考。
Q238972 INFO: Using Visual C++ to Automate Office/doc/b96834780.html,/support/kb/articles/q238/9/72.aspQ196776 FAQ: Office Automation Using Visual C++/doc/b96834780.html,/support/kb/art icles/q196/7/76.asp此外,我在以下列出了Q178784中的样例代码,并添加了一些中文注释。
VC6.0中利用Word实现报表功能
æ3çè[
Ú¤¢@ ’(’,+(89*4 O P ’(2-/O P’()*.(/89*4 O P’(H
QRST&U6VJWXYZJ[\] !^U6_‘ 3a#b;78cdefgh’ijAklmn%] op;< qr# 5)6 ST] b;78stuvkwxyz 3U6ST] o:;< A#{|U6}~&=:7U/ST] b ;781cdyz3U/STs1cd_‘3U/S T7U/ 3@j! 89*4 7"s901" 01JjJ 89*4] Fc# #$ &ST4_‘ 3U6>j ¡¢@6£¤¥K ¦§3¨©’2ª«¬lmcdU6ST01Fb ®¯ #$ °# 89*4 cdU601] : # $ % & ±²³´¡µ}3U6¶·# 89*4 -¸ O ¹¬º»µ¼cd½¾¼¿Àº[´Ps¹ ¬³´ÁRÂÃÄÅ/ÆÇ~ÈF #$ Sn 89*4ɳ \ÁRZÊ[\ËU6ÇÌÍF #$ °# 89*4 3ST 01] ; ’ ( ) * ÎÏ#yz3ÐÑÒÓÔÕ3cd78 ÖÕcd× Ø!Î<
:KK I 年 I 月
电
脑
学
习
第 : 期
#$T7K 中利用 89*4 实现报表功能
+,-!
. /
介绍 #$T7K 中利用 89*4 实现报表功能, 进行详细的论述, 并给出实例。
012
#$T7K
89*4
报表
!"#$% &’() *’ +,-.#/, +,0’(*" #$ 12345
67-$ 8’$%9’$% :;"*(-<* =,9&’() SD+ /D+B.B 4.B>CBB+B .( >9(>*+/+ 4+/-.= CB.(0 89*4 /9 *+-=.V+ *+,9*/B .( #$T7K" /D+( 0.W+B 9C/ ./B +G-<,=+B7 #$T7K 89*4 ! ! A+,9*/B " !7 # 89*4 45 ÙÙÚ <94+=749>]Ù 9>Ûj 6Æ >Û M Ú ?99@<-*@!PÇ :7 ÜÝ>ÛGkÞaD3#)*DEXß~àÚ 89*4Ç £Ù A+B9C*>+7D E/45FG7D89*47D89*42=07D $)) Ù E/45FG7>,,89*47>,,89*42=07>,,Ç ;7 FÞaDÀºáÛâ㤢@< Sn 89*4 "  ÃÄÅ6ÆZÊ[\STäå 89*4] $=9B+89*4Ç I7 FÞaDéêë" ìíÝîïðñ" ì 5C/9<H -/.9(éò 544 $=-BB ì F9*< - /J,+ =.?*-*J] óôõö Ë 9FF.>+:KKK ÷øóô ì %B89*4L79=? éòS$F >9(F.*< $=-BB+B ùÏJìú 89*4 3Þû O ü7¹¬ý ìPéò ’M7] b¶Fþ5ÿ !" óô # ¥ü <B89*4L7 D <BБайду номын сангаас9*4L7>,, $ÛÙÇ N F£Ù 89*42=07D n£%Àº!Î&’<
VC6.0动态生成Word表格实例
VC6.0动态⽣成Word表格实例(1)⾸先,向你的项⽬中添加word 2003类型库:⽅法是在MFC ClassWizard中点击按钮Add Class,选择From a type library,在弹出的浏览对话框中,浏览找到office 2003安装路径下的msword.olb⽂件,例如:"C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB",然后选择以下类,这些类都是后⾯实现⽣成word表格要⽤到的:_Application,Documents,_Document,Range, Paragraph,Paragraphs,Cell,Cells,Table,Tables,Border,Borders ,_Font ,PageSetup(2)在使⽤到这些类型的类的头⽂件或者cpp⽂件的开头,包含以下头⽂件:#include "msword.h"(3)创建如下代码//1.定义对象_Application oWordApp;Documents oDocs;_Document oDoc;Range range;Paragraph paragraph;Paragraphs paragraphs;Cell cell;Cells cells;Table table;Tables tables;Border border;Borders borders;_Font font;PageSetup pagesetup;//2.创建和连接word对象,初始化连接,判断当前系统是否有word进程,然后然后创建或连接对象LPDISPATCH pDisp;LPUNKNOWN pUnk;CLSID clsid;CoInitialize(NULL);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表格oDocs.ReleaseDispatch();oWordApp.m_bAutoRelease=true;BeginWaitCursor();oDocs=oWordApp.GetDocuments();COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR); oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);//加新⽂档pagesetup=oDoc.GetPageSetup();pagesetup.SetOrientation(1);//横向paragraphs=oDoc.GetParagraphs(); //⽣成第⼀个表paragraph=paragraphs.GetLast();//以当前段落最后⼀⾏为表起始位置range=paragraph.GetRange();//添加制作新表格tables=oDoc.GetTables();int nBhCount=3;table=tables.Add(range,5+nBhCount,6,vOpt,vOpt);borders=table.GetBorders();borders.SetEnable(1);//显⽰表框range=table.GetRange();cells=range.GetCells();cells.SetVerticalAlignment(1);//⽂字居中#define DOC_TABLE1_WIDTH 60cells.SetWidth(DOC_TABLE1_WIDTH);cell=table.Cell(1,1);//合并第⼀⾏的三列cell.Merge(table.Cell(1,6));range=cell.GetRange();range.SetBold(1);range.SetText(" 病害统计信息");//居中cell=table.Cell(2,1);cell.Merge(table.Cell(2,2));range=cell.GetRange();range.SetBold(1);range.SetText("组成材料");cell=table.Cell(2,2);cell.Merge(table.Cell(2,4));range=cell.GetRange();range.SetBold(1);range.SetText("病害种类");cell=table.Cell(2,3);range=cell.GetRange();range.SetBold(1);range.SetText("病害总数");for(int iBh=0;iBh<nBhCount;iBh++){cell=table.Cell(2+iBh+1,1);cell.Merge(table.Cell(2+iBh+1,2));range=cell.GetRange();range.SetBold(0);range.SetText("hello1");cell=table.Cell(2+iBh+1,2);cell.Merge(table.Cell(2+iBh+1,4));range=cell.GetRange();range.SetBold(0);range.SetText("hello2");cell=table.Cell(2+iBh+1,3);range=cell.GetRange();range.SetBold(0);range.SetText("hello3");}cell=table.Cell(3+nBhCount,1);//合并7列cell.Merge(table.Cell(3+nBhCount,6));range=cell.GetRange();range.SetBold(1);range.SetText(" 等级统计信息"); for(int iCol=1;iCol<=6;iCol++){cell=table.Cell(3+nBhCount+1,iCol);range=cell.GetRange();range.SetBold(1);range.SetText("hello4");cell=table.Cell(3+nBhCount+2,iCol);range=cell.GetRange();range.SetBold(0);range.SetText("hello5");}//保存,清理CString strSave="D:\\test.doc";COleVariant vTrue((short)TRUE), vFalse((short)FALSE);_Document oActiveDoc;oActiveDoc = oWordApp.GetActiveDocument();oActiveDoc.SaveAs(COleVariant(strSave),COleVariant((short)0), vFalse, COleVariant(""), vTrue,COleVariant(""),vFalse,vFalse, vFalse, vFalse, vFalse,vOpt,vOpt,vOpt,vOpt,vOpt);oWordApp.SetVisible(true);oDocs.ReleaseDispatch(); //断开关联;oWordApp.ReleaseDispatch(); //退出WORDEndWaitCursor();(5)⽣成表格如下:病害统计信息组成材料病害种类病害总数hello1hello2hello3hello1hello2hello3hello1hello2hello3等级统计信息hello4hello4hello4hello4hello4hello4hello5hello5hello5hello5hello5hello5。
运用VC或Java对Office进行编程操作
ObtGuiGcomOfficePrinter::ObtGuiGcomOfficePrinter()
{
}
ObtGuiGcomOfficePrinter::~ObtGuiGcomOfficePrinter()
{
}
BOOL ObtGuiGcomOfficePrinter::PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
{
AfxMessageBox("创建Excel服务失败!");
return FALSE;
}
m_excelApp.SetVisible(FALSE); //设置为隐藏
//利用模板文件建立新文档
m_excelBooks.AttachDispatch(m_excelApp.GetWorkbooks(),true);
{
_PptApplication m_powerpointApp;
Presentations m_powerpointPres;
_Presentation m_powerpointPre;
m_powerpointPres.ReleaseDispatch();
m_powerpointPre.ReleaseDispatch();
class AFX_EXT_CLASS ObtGuiGcomOfficePrinter
{
public:
ObtGuiGcomOfficePrinter();
virtual ~ObtGuiGcomOfficePrinter();
//Operator
VC和CB中操作word方法——Word自动化
VC和CB中操作word方法——Word自动化By comor 摘要:本文简述了实现Word自动化的一般方法,并讨论了在两种开发环境中实现Word自动化的方法。
关键词:COM技术Word自动化本文讨论使用VC++6.0和C++ Builder6.0自动报表生成的探讨。
自动报表属于Office自动化中的技术。
自动化(以前称为OLE(Object Linking and Embedding,对象链接与嵌入))是一种允许您利用现有程序的功能并将其合并到您自己的应用程序中的技术,自动化是建立在的COM(Component Object Model,组件对象模型)技术基础上。
本文首先讨论Office自动化的一般步骤,以Word2003为例,再讨论在VC++ 6.0和C++ Builder6.0中的实现。
1 Word自动化COM技术是将一种功能性的插件做到语言无关、平台无关,程序之间可以互相调用、互相通信的一种技术。
在具有Office自动化功能的程序中对Office文件操作,如同在Word文档中添加一个Viso 图标,在Word中双击这个图标便可以直接使用Viso进行编辑。
使用COM技术进行Word操作,就是通过开发的程序调用Word的类型库,使用库中提供的各种操作完成对Word程序和文档的各种操作,如同在使用Word程序本身操作一样。
在进行程序开发时,首先要将对应的库文件加入工程中。
不同的版本的Office对应不同的库文件,对照如下:Word2003对应的类型库文件为MSWord.olb,在自动化开发前首先要将这个库文件添加进工程。
2 VC++ 6.0中的实现以基于对话框的MFC工程为例。
2.1 初始化新建一个基于对话框的MFC工程,在新建过程中如果勾选“Automation”将自动进行初始化,不勾选的话可以手动添加初始化。
这是在cpp文件中InitInstanse()自动的初始化:// Initialize OLE librariesif (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}不勾选的话,可以在Word操作代码执行前进行初始化,例如可以在*Dlg.cpp中OnInitDialog()中手动初始化:if (!AfxOleInit()){AfxMessageBox(“OLE初始化失败!”);return FALSE;}接着,将Word类型库添加进工程。
vc操作word
最近程序中涉及到对word的操作,生成检测报告,摸索了一个多星期。
查找到了些资料,学到了些方法:第一:操作word必须要做的步骤;第二:巧妙的方法;第三:现成的操作实例。
第一:操作word必须要做的步骤为了更有逻辑,更有层次地操作 Office,Microsoft 把应用(Application)按逻辑功能划分为如下的树形结构Application(WORD 为例,只列出一部分)Documents(所有的文档)Document(一个文档)......Templates(所有模板)Template(一个模板)......Windows(所有窗口)WindowSelectionViewSelection(编辑对象)FontStyleRange............只有了解了逻辑层次,我们才能正确的操纵 Office。
举例来讲,如果给出一个VBScript语句是:application.ActiveDocument.SaveAs "c:\abc.doc" 那么,我们就知道了,这个操作的过程是:第一步,取得Application;第二步,从Application中取得ActiveDocument;第三步,调用 Document 的函数 SaveAs,参数是一个字符串型的文件名。
1)基本步骤(1)创建(或打开已有的)一个 MFC 的程序工程(2)Ctrl+W 执行 ClassWizard(本文按照 VC6 操作,例子程序也是在VC6 下编写测试的)(3)Add Class...\From a type Library... 在 Office 目录中,找到你想使用的类型库。
(我使用的是 Office2000,其Word 的类型库文件,保存在C:\Program Files\Microsoft Office\Office\MSWORD9.OLB)根据你 Office 的版本,可以使用下表列出的类型库文件(4)选择类型库文件后,在弹出的对话窗中继续选择要添加的类。
VC2010对Excel的操作
VC2010对Excel的操作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这六个就可以了。
可以看到,六个类被添加了进来。
3.修改头文件分别将加进来的六个头文件上面的“#import"C:\\ProgramFiles\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace”注释掉。
4.添加头文件在stdAfx.h头文件中添加加进来的这几个头文件#include"CApplication.h"#include"CRange.h"#include"C Workbook.h"#include"C Workbooks.h"#include"C Worksheet.h"#include"C Worksheets.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()”,这样就可以编译成功了。
VC操纵WORD文档详解
1.打开VC2.单击File->New3. 在Projects标签下选择MFC AppWizard(exe),在右边Project name中填好项目名称:VcToWord,单击OK4.在MFC AppWizard – Step 1中,选中单选框Dialog based,单击Finish5.在New Project Information对话框中单击OK6.删除VcToWord对话框上多余按钮和文本,添加一个按钮,ID改为IDC_GEN_WORD,Caption改为“生成WORD”7.双击该按钮,弹出以下对话框,单击OK8.得到以下代码9.按下快捷键Ctrl+W,弹出MFC ClassWizard对话框,单击Add Class…,选择From a type library…,弹出Import from Type Library对话框,找到你OFFICE软件的安装文件夹(默认是在C盘的Program Files中),在其中找到MSWORD.OLB,单击打开10.在Confirm Classes中按下Ctrl键选中_Application,Documents,_Document,InlineShapes 和Selection,单击OK11.再次单击MFC ClassWizard对话框中的OK,可以看到多了以下几个类12.在VcToWord.cpp的头部添加#include "msword.h"13.在VcToWordDlg.cpp的头部添加#include "msword.h"14.在CvcToWordApp类在InitInstance函数里添加以下几行代码15.由于IDP_OLE_INIT_FAILED未定义,故需在Resource.h中定义如下16.回到OnGenWord函数,在其中添加如下代码17.记得将本文件夹下的csdn.bmp图片复制到C盘的根目录中17.编译链接运行程序,单击“生成WORD”,在C盘根目录中得到VcToWord.doc18.打开VcToWord.doc完毕!!!。
在VC中使用Automation操纵Word和Excel
在VC中使用Automation操纵Word和Excel在VC中使用Automation操纵Word和Excel最近要在程序中添加一个将程序中的图片和数据输出到Word的功能并且需要将数据导出到Excel,以前从来没弄过,遂首先祭起在CSDN的VC/MFC论坛搜索的法宝。
输入关键字Word得到n篇帖子,一一看过之后得知有两种方法可以做我所需要的事情,一种是使用Office自带的类型库的方法,另一种是直接使用COM的Automation技术。
两种方法比较之后,由于使用类型库所需要导入的类太多,并且对于不同的Office版本的兼容性问题不好掌握,因此在我的程序中使用了COM的Automation技术进行操作。
方法决定了,接下来是具体的编码咯。
先来实现将数据导出到Word,参考MSDN中的Q238393得到了一个AutoWrap函数,这是最有用的。
然后参考Q220911得到了对Word的操作的方法,如画表格、输入文字、分行等,但是Q220911中提供的是使用类型库的方法(其实二者是大同小异,如果你跟踪进入到MSWord.h里面去的话,你会发现MSWord.h里面使用的就是Automation的Invoke函数来调用各个属性或者方法的分发ID来实现功能的,不过是封装了起来而已),因此打开VC自带的工具OLEViewer和Office自带的VBA中文帮助,并且还用到了MSDN 中的Q216388提供的B2CSE.exe来将VBA转化到C++代码。
经过几个工作日的努力终于达到了我所要求的效果。
再来实现将数据导出到Excel的功能,这个要求比较简单。
基本方法同上,也是使用了AutoWrap。
对Excel的操作参考了Q216686,使用SafeArray来对Excel进行填充。
很快也就达到了要求。
总结完了,不知大家能从这篇文章中得到什么呢?。
VC++2010操作Word2010
环境:win7+vs2010+office2010/20131、创建MFC工程,非Unicode。
2、添加Word的类库添加所有的接口,可以作为一个文件夹,以后再使用只要加入该文件夹就可以了。
由于函数命名冲突,需要在生成的头文件中做相应处理,即://#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace #import"C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace\ raw_interfaces_only \rename("FindText", "_FindText") \rename("Rectangle", "_Rectangle") \rename("ExitWindows", "_ExitWindows")对于不同版本的office,其默认的类型库位置如下表所示:特别的,word2013在vc2010下必须手动指定类型库文件位置。
3、在stdafx中添加调用的头文件#include"Word2010/CApplication.h"// word程序对象#include"Word2010/CDocuments.h"// 文档集对象#include"Word2010/CDocument0.h"// 单个docx对象#include"Word2010/CSelection.h"// 该对象代表窗口或窗格中的当前所选内容,使用率最高#include"Word2010/CCell.h"// 表格单元格#include"Word2010/CCells.h"// 表格单元格集合#include"Word2010/CRange.h"// 该对象代表文档中的一个连续范围#include"Word2010/CTable0.h"// 单个表格#include"Word2010/CTables0.h"// 表格集合#include"Word2010/CFont0.h"// 字体#include"Word2010/CParagraphs.h"// 段落集合#include"Word2010/CParagraphFormat.h"// 段落样式#include"Word2010/CParagraph.h"// 单个段落#include"Word2010/CnlineShape.h"// Inline图形对象集合#include"Word2010/CnlineShapes.h"// 单个Inline图像对象#include"Word2010/CRow.h"// 单个行#include"Word2010/CRows.h"// 行集合#include"Word2010/CFields.h"#include"Word2010/CPane0.h"// 页眉等设置#include"Word2010/CWindow0.h"// 页眉等设置#include"Word2010/CView0.h"// 页眉等设置#include"Word2010/CPageSetup.h"// 页面设置4、注销每个引入的头文件的import行//#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace不过如果使用wdMove等参数的话,只需要在CApplication.h文件中改为://#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace#import"C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace\ raw_interfaces_only \rename("FindText", "_FindText") \rename("Rectangle", "_Rectangle") \rename("ExitWindows", "_ExitWindows")否则,如果没有上面一段,则报错提示为(即全部头文件都注销import的情况下):但是上述的方法会带来一个问题,就是当word版本改变时会出现问题,解决办法就是上述报错的变量都用其数值代替就不会有问题了(写代码时可以加上用以查看wdMove等变量的值),如下面一些:wdAlignParagraphLeft = 0wdAlignParagraphCenter = 1wdAlignParagraphRight = 2wdAlignParagraphJustify = 3wdParagraph = 4wdMove = 0wdStyleHeading1 = -2wdStory = 6页面纵向wdOrientPortrait=0页面横向wdOrientLandscape=1enum WdUnits{wdCharacter = 1, // 字母wdWord = 2, // 单词wdSentence = 3, // 句子wdParagraph = 4, // 段落wdLine = 5, // 行wdStory = 6, // 所选区域wdScreen = 7, // 当前屏幕wdSection = 8, // 部分wdColumn = 9, // 列wdRow = 10, // 行wdWindow = 11, // 窗口wdCell = 12, // 单元格wdCharacterFormatting = 13, // 字体格式wdParagraphFormatting = 14, // 段落格式wdTable = 15, // 表格wdItem = 16 // 项目};具体可以参考手册或者通过VBA代码查看。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
,VC在WORD中加入文本数据;
进行word写的VBA宏代码
VC++会自动地在WordAutomation.cpp中的CWordAutomationApp::InitInstance()中生成如
下的代码,使得COM的服务能有效。
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
// TODO: Add your command handler code here
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vTmp,
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//创建Word实例
_Application oWordApp;
if (!oWordApp.CreateDispatch("Word.Application", NULL))
{
AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);
return;
}
Range Rng;
Table Tbl;
Tables Tbls;
//创建一个新的word文档
Documents oDocs;
_Document oDoc;
oDocs = oWordApp.GetDocuments();
oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);
//如果是word 98,则应该带两个参数,如oDocs.Add(vOpt, vOpt)
//把文本添加到word文档
Selection oSel;
oSel = oWordApp.GetSelection();
oSel.TypeText("one");
oSel.TypeParagraph();
oSel.TypeText("two");
oSel.TypeParagraph();
oSel.TypeText("three");
//保存word文档
_Document oActiveDoc;
oActiveDoc = oWordApp.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"),
COleVariant((short)0),
vFalse, COleVariant(""), vTrue, COleVariant(""),
vFalse, vFalse, vFalse, vFalse, vFalse,vFalse,vFalse,vFalse,vFalse,vFalse);
//退出word应用程序
//oWordApp.Quit(vOpt, vOpt, vOpt);
二,用VC在WORD中加入表格;
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vTmp,
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//创建Word实例
_Application WrdApp;
if (!WrdApp.CreateDispatch("Word.Application", NULL))
{
AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);
return;
}
Documents Docs;
_Document Doc;
Range Rng;
Table Tbl;
Tables Tbls;
//创建新文档
Docs = WrdApp.GetDocuments();
Doc = Docs.Add(vOpt, vOpt, vOpt, vOpt);
Rng=Doc.GetContent();
//{{
Tbls=Doc.GetTables(); 必须给这个变量初始化//}}
Tbls.Add(Rng,5,5,vOpt,vOpt);/。