VC操纵WORD文档详解
- 格式:doc
- 大小:358.50 KB
- 文档页数:9
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系列(一)近曰作一个小东西涉及到对汇总结果的打印,由于打印只在一台特定的机器进行所以考虑使用Word来实现,这样比较简单而且很专业。
开始的时候这个东西没有这项功能后来我闲的无聊看看是否可以实现(以前从来没有做过这方面的东西),于是乎搞了一下也不是很难,一点心得大家给指点一二,使用的是Office2000,工程类型是MFC 的对话框。
先看看需要使用到的东东:1.View->ClassWizard->Automation->Add Class From Library:定位到你安装Office的目录找到MSWord9.Olb 2.打开后把所有的类都选中倒入到你的工程(反正也是搞一回彻底一点:P) 3.在你的对话框头文件中加上#include"msword9.h" OK了准备工作搞定之后就可以玩儿转Word了,先来一个简单的void TestWord1(){Application app;COleVariant vTrue((short)TRUE), vFalse((short)FALSE);app.CreateDispatch(_T("Word.Application"));app.SetVisible(FALSE);//Create New DocDocuments docs=app.GetDocuments();CComVarianttpl(_T("")),Visble,DocType(0),NewTemplate(false);docs.Add(&tpl,&NewTemplate,&DocType,&Visble);//Add Content:TextSelection sel=app.GetSelection();sel.TypeText(_T("\t\t\t\t\t第一次玩儿Word\r\n")); sel.TypeText(_T("\t\t\t\t\t\t\t\t----------先来一个简单的\r\n"));sel.ReleaseDispatch();docs.ReleaseDispatch();app.SetVisible(TRUE);app.ReleaseDispatch();}f:\App\CtrlWord\CtrlWord.h(11): fatal error C1083: 无法打开包含文件:“MSWord9.h”: No such file or directory上面的错误已解决,在环境中,不需要加入msowrd9.h,而只要加入用到.h文件就可以了,例子中要加入#include "CApplication.h" //test#include "CDocuments.h" //test#include "CSelection.h" //testVC操作Word系列(二)大家都应该使用过Word提供的表格功能很是专业,如果在作一些数据库开发之类的软件对汇总的数据进行打印是常见的功能,这个如果用Word来实现个人感觉不错,废话少说说练咱就练。
C#操作Word的超详细总结本文中用C#来操作Word,包括:创建Word;插入文字,选择文字,编辑文字的字号、粗细、颜色、下划线等;设置段落的首行缩进、行距;设置页面页边距和纸张大小;设置页眉、页码;插入图片,设置图片宽高以及给图片添加标题;插入表格,格式化表格,往表格中插入数据;保存Word,打印Word;重新打开Word等。
Visual studio版本:Visual Studio 2012(2010应该也可以)准备工作:/*1. 添加引用COM里面的Microsoft Word 12.0 Object. Library 引用(12.0表示Word 2007版本)2. 导命名空间using MSWord =Microsoft.Office.Interop.Word;using System.IO;using System.Reflection;3. 把引用中的Microsoft.Office.Interop.Word的“属性”中的嵌入互操作设为False */以下是全部代码:(代码有点长,但请不要有压力,直接复制进去就能直接成功运行)1using System;2using System.Collections.Generic;3using System.Linq;4using System.Runtime.InteropServices;5using System.Text;6using MSWord = Microsoft.Office.Interop.Word;7using System.IO;8using System.Reflection;910namespace Console_WordSkill_All11 {12class Program13 {14static void Main(string[] args)15 {16object path; //文件路径变量17string strContent; //文本内容变量18 MSWord.Application wordApp; //Word 应用程序变量19 MSWord.Document wordDoc; //Word文档变量2021 path = Environment.CurrentDirectory +"\\MyWord_Print.doc";22 wordApp = new MSWord.ApplicationClass(); //初始化2324 wordApp.Visible = true;//使文档可见2526//如果已存在,则删除27if (File.Exists((string)path))28 {29 File.Delete((string)path);30 }3132//由于使用的是COM库,因此有许多变量需要用Missing.Value代替33 Object Nothing = Missing.Value;34 wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);3536#region页面设置、页眉图片和文字设置,最后跳出页眉设置 3738//页面设置39 wordDoc.PageSetup.PaperSize =MSWord.WdPaperSize.wdPaperA4;//设置纸张样式为A4纸40 wordDoc.PageSetup.Orientation =MSWord.WdOrientation.wdOrientPortrait;//排列方式为垂直方向41 wordDoc.PageSetup.TopMargin = 57.0f;42 wordDoc.PageSetup.BottomMargin = 57.0f;43 wordDoc.PageSetup.LeftMargin = 57.0f;44 wordDoc.PageSetup.RightMargin = 57.0f;45 wordDoc.PageSetup.HeaderDistance = 30.0f;//页眉位置 4647//设置页眉48 wordApp.ActiveWindow.View.Type =MSWord.WdViewType.wdNormalView;//普通视图(即页面视图)样式49 wordApp.ActiveWindow.View.SeekView =MSWord.WdSeekView.wdSeekPrimaryHeader;//进入页眉设置,其中页眉边距在页面设置中已完成50 wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphRight;//页眉中的文字右对齐515253//插入页眉图片(测试结果图片未插入成功)54 wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;55string headerfile =@"C:\Users\xiahui\Desktop\OficeProgram\3.jpg";56 MSWord.InlineShape shape1 =wordApp.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(hea derfile, ref Nothing, ref Nothing, ref Nothing);57 shape1.Height = 5;//强行设置貌似无效,图片没有按设置的缩放——图片的比例并没有改变。
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中用户随意设计好报表的格式,并在相应需要程序修改的位置插入书签,书签用于将程序中想要输出变量的值带入模板中,模板中的书签名字一定要与程序中的一致,笔者建议将程序中变量的名字做为书签。
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操作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中的样例代码,并添加了一些中文注释。
Using Microsoft.Office.Interop.Word;Microsoft Office 11.0 Object Library;Microsoft.Office.Interop.Word.Application myword = new Microsoft.Office.Interop.Word.Application();//对word软件的操作Microsoft.Office.Interop.Word.Document mydoc = new Microsoft.Office.Interop.Word.Document();//对word软件中文本的操作Microsoft.Office.Interop.Word.Range myrange = myword.Application.Selection.Range;//对word软件中文本字体设置的操作Microsoft.Office.Interop.Word.InlineShape shape = myword.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(“图片地址”, Nothing, Nothing, Nothing);//页眉插入图片Microsoft.Office.Interop.Word.PageNumbers Pns = myword.Selection.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers;//获取当前页码myword.Selection 和myword.Application.Selection//两者使用相同,Application指向的是Word应用程序Object Nothing = System.Reflection.Missing.Value;//选参数的默认参数Object unite = WdUnits.wdStory;//word场景范例:①myword.selection.EndKey(ref unite,ref NoThing);①Word引用常用的方法:/*文档集指向Word的文档*/mydoc = myWord.Document.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);//文档集指向word文档mydoc.Activate();//激活mydoc指定对象/*Word文档操作*/Object path = “本机保存文件地址”;Object format003 = WdSaveFormat.wdFormatDocument;//指定保存的格式mydoc.SaveAs(ref path,ref format003,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing);//保存word文档mydoc.SaveAs2(ref path,ref formatPDF,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing);//保存word文档SaveAs(..)函数和SaveAs2(..)函数的区别:SaveAs2(..)只适用在Word2010项目中。
,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);/。
1.打开VC
2.单击File->New
3. 在Projects标签下选择MFC AppWizard(exe),在右边Project name中填好项目名称:VcToWord,单击OK
4.在MFC AppWizard – Step 1中,选中单选框Dialog based,单击Finish
5.在New Project Information对话框中单击OK
6.删除VcToWord对话框上多余按钮和文本,添加一个按钮,ID改为IDC_GEN_WORD,Caption改为“生成WORD”
7.双击该按钮,弹出以下对话框,单击OK
8.得到以下代码
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,单击OK
11.再次单击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.doc
18.打开VcToWord.doc
完毕!!!。