VC进行word操作

合集下载

VC如何读取Word文档中的批注内容

VC如何读取Word文档中的批注内容

VC如何读取Word文档中的批注内容第一步import office com对象库Stdafx.h.#import"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\MSO.dll" \ rename("RGB", "_OfficeRGB")#import"C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"#import"D:\Program Files\Microsoft Office\Office14\MSWORD.OLB"rename("ExitWindows","_OfficeExitWindows") \rename("FindText", "_ScriptFindText")第二步 .cppif(FAILED(::CoInitialize(NULL)))return;HRESULT hr = S_OK;Word::_ApplicationPtr pApp=NULL;try{pApp.CreateInstance (__uuidof(Word::Application),NULL);pApp ->PutVisible (VARIANT_TRUE);Word::_DocumentPtr pDoc=pApp ->GetDocuments()->Open(&(_variant_t("C:\\FreeX.docx")));_bstr_t content=pDoc->Content->Text;long nCmtCount = pDoc->Comments->Count;TRACE("Word content: %s \n", (LPCTSTR)(_bstr_t)content);for (long i = 1; i < nCmtCount+1; i++){Word::CommentPtr pCmt= pDoc->Comments->Item(i);_bstr_t bstrCmt = pCmt->Range->Text;TRACE("Word Comments[%d]: %s\n", i, (LPCTSTR)bstrCmt);pCmt.Release();pCmt = NULL;}pDoc->Close();pApp->Quit();// release documentptr smart pointer;pDoc.Release();}catch (_com_error pCome){TRACE("Error info: %s \n", (LPCTSTR)(_bstr_t)(pCome.Description()));TRACE("Error info: %s \n", (pCome.ErrorMessage()));}if (pApp){pApp.Release();}::CoUninitialize();。

c语言Word文字处理

c语言Word文字处理

输入内容的第一步是光标定位。那么什么是光标? 为什么要光标定位呢?
❖ 光标表示录入内容时的插入位置。 ❖ 键盘定位
利用键盘方向键
❖ 鼠标定位
在欲插入内容处单击鼠标左键。
光标定位之后,要输入文本。那么如何选择输入 法?
❖ 使用Ctrl+Shift组合键在英文和各种中文输入 法之间进行切换。
❖ 使用鼠标单击任务栏右侧的语言指示器,在 打开的输入法菜单中选择所需输入法。
3.4 文档排版
3.4.1 字符排版 3.4.2 段落排版 3.4.3 页面排版
3.4.1 字符排版
字符是指文档中输入的汉字、字母、数 字、标点符号和各种符号,字符排版有2种: 字符格式化和中文版式。字符格式化包括: 字符的字体和字号、字形(加粗和倾斜)、字 符颜色、下划线、着重号、静态效果(如阴影、ห้องสมุดไป่ตู้上下标等)、字符的间距、字符和基准线的上 下位置以及文字动态效果等;中文版式是针 对中文字符提供的版式。
【例3.6】 对文档“你从鸟声中醒来”继续进行段 落排版
2.项目符号和编号、边框和底纹、制表符和格式刷
❖ 项目符号和编号
选择需要添加项 目符号或编号的 若干段落,然后 单击“格式”工 具栏中的项目符 号按钮或编号按 钮。
❖ 边框和底纹
选定段落, 执行“格式|边 框和底纹”菜单 命令,打开“边 框和底纹”对话 框,其中有边框、 页面边框、底纹 3个选项卡。
❖ 快捷启动 双击桌面上的Word快捷方式图标
❖ 通过已有文档进入Word 2003
2.退出Word 2003
❖ 单击标题栏右侧的“关闭”按钮。 ❖ 执行“文件|退出”菜单命令 ❖ 单击标题栏左侧的“W”图标,在随之打
开的快捷菜单中,单击关闭。 ❖ 双击标题栏左侧的“W”图标。 ❖ 单击“文件”菜单,按X键 ❖ 按组合键Alt+F4。

C#通过Microsoft.Office.Interop.Word操作Word

C#通过Microsoft.Office.Interop.Word操作Word

C#通过Microsoft.Office.Interop.Word操作Word1、安装可以通过NuGet搜索Office,安装Microsoft.Office.Interop.Word;⽐如我的机器是Office2019,没有对应的Microsoft.Office.Interop.Word,则可以通过Nuget⽅式进⾏安装。

2、具体代码操作,找到,但实际测试页眉部分会出问题,注释掉就可以了。

转载如下:创建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*/以下是全部代码:(代码有点长,但请不要有压⼒,直接复制进去就能直接成功运⾏)using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using MSWord = Microsoft.Office.Interop.Word;using System.IO;using System.Reflection;namespace WindowsFormsCom{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){object path; //⽂件路径变量string strContent; //⽂本内容变量MSWord.Application wordApp; //Word应⽤程序变量MSWord.Document wordDoc; //Word⽂档变量path = Path.GetFullPath("../../") + "\\MyWord_Print.doc";wordApp = new MSWord.ApplicationClass(); //初始化wordApp.Visible = true;//使⽂档可见//如果已存在,则删除if (File.Exists((string)path)){File.Delete((string)path);}//由于使⽤的是COM库,因此有许多变量需要⽤Missing.Value代替Object Nothing = Missing.Value;wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);#region页⾯设置、页眉图⽚和⽂字设置,最后跳出页眉设置//页⾯设置wordDoc.PageSetup.PaperSize = MSWord.WdPaperSize.wdPaperA4;//设置纸张样式为A4纸wordDoc.PageSetup.Orientation = MSWord.WdOrientation.wdOrientPortrait;//排列⽅式为垂直⽅向wordDoc.PageSetup.TopMargin = 57.0f;wordDoc.PageSetup.BottomMargin = 57.0f;wordDoc.PageSetup.LeftMargin = 57.0f;wordDoc.PageSetup.RightMargin = 57.0f;wordDoc.PageSetup.HeaderDistance = 30.0f;//页眉位置#endregion#region页码设置并添加页码//为当前页添加页码MSWord.PageNumbers pns = wordApp.Selection.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers;//获取当前页的号码 pns.NumberStyle = MSWord.WdPageNumberStyle.wdPageNumberStyleNumberInDash;//设置页码的风格,是Dash形还是圆形的pns.HeadingLevelForChapter = 0;pns.IncludeChapterNumber = false;pns.RestartNumberingAtSection = false;pns.StartingNumber = 0; //开始页页码?object pagenmbetal = MSWord.WdPageNumberAlignment.wdAlignPageNumberCenter;//将号码设置在中间object first = true;wordApp.Selection.Sections[1].Footers[MSWord.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers.Add(ref pagenmbetal, ref first);#endregion#region⾏间距与缩进、⽂本字体、字号、加粗、斜体、颜⾊、下划线、下划线颜⾊设置wordApp.Selection.ParagraphFormat.LineSpacing = 16f;//设置⽂档的⾏间距wordApp.Selection.ParagraphFormat.FirstLineIndent = 30;//⾸⾏缩进的长度//写⼊普通⽂本strContent = "我是普通⽂本\n";st.Range.Text = strContent;st.Range.Text = "我再加⼀⾏试试,这⾥不加'\\n'";//直接添加段,不是覆盖( += )st.Range.Text += "不会覆盖的,";//添加在此段的⽂字后⾯,不是新段落st.Range.InsertAfter("这是后⾯的内容\n");//将⽂档的前4个字替换成"哥是替换⽂字",并将其颜⾊设为红⾊object start = 0;object end = 4;MSWord.Range rang = wordDoc.Range(ref start, ref end);rang.Font.Color = MSWord.WdColor.wdColorRed;rang.Text = "哥是替换⽂字";wordDoc.Range(ref start, ref end);//写⼊⿊体⽂本object unite = MSWord.WdUnits.wdStory;wordApp.Selection.EndKey(ref unite, ref Nothing);//将光标移到⽂本末尾wordApp.Selection.ParagraphFormat.FirstLineIndent = 0;//取消⾸⾏缩进的长度strContent = "这是⿊体⽂本\n"; = "⿊体";st.Range.Text = strContent;//写⼊加粗⽂本strContent = "这是粗体⽂本\n"; //wordApp.Selection.EndKey(ref unite, ref Nothing);//这⼀句不加,有时候好像也不出问题,不过还是加了安全st.Range.Font.Bold = 1;st.Range.Text = strContent;//写⼊15号字体⽂本strContent = "我这个⽂本的字号是15号,⽽且是宋体\n";wordApp.Selection.EndKey(ref unite, ref Nothing);st.Range.Font.Size = 15; = "宋体";st.Range.Text = strContent;//写⼊斜体⽂本strContent = "我是斜体字⽂本\n";wordApp.Selection.EndKey(ref unite, ref Nothing);st.Range.Font.Italic = 1;st.Range.Text = strContent;//写⼊蓝⾊⽂本strContent = "我是蓝⾊的⽂本\n";wordApp.Selection.EndKey(ref unite, ref Nothing);st.Range.Font.Color = MSWord.WdColor.wdColorBlue;st.Range.Text = strContent;//写⼊下划线⽂本strContent = "我是下划线⽂本\n";wordApp.Selection.EndKey(ref unite, ref Nothing);st.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineThick;st.Range.Text = strContent;//写⼊红⾊下画线⽂本strContent = "我是点线下划线,并且下划线是红⾊的\n";wordApp.Selection.EndKey(ref unite, ref Nothing);st.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineDottedHeavy;st.Range.Font.UnderlineColor = MSWord.WdColor.wdColorRed;st.Range.Text = strContent;//取消下划线,并且将字号调整为12号strContent = "我他妈不要下划线了,并且设置字号为12号,⿊⾊不要斜体\n";wordApp.Selection.EndKey(ref unite, ref Nothing);st.Range.Font.Size = 12;st.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineNone;st.Range.Font.Color = MSWord.WdColor.wdColorBlack;st.Range.Font.Italic = 0;st.Range.Text = strContent;#endregion#region插⼊图⽚、居中显⽰,设置图⽚的绝对尺⼨和缩放尺⼨,并给图⽚添加标题wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到⽂档末尾//图⽚⽂件的路径string filename = Path.GetFullPath("../../") + "\\6.jpg";//要向Word⽂档中插⼊图⽚的位置Object range = st.Range;//定义该插⼊的图⽚是否为外部链接Object linkToFile = false; //默认,这⾥貌似设置为bool类型更清晰⼀些//定义要插⼊的图⽚是否随Word⽂档⼀起保存Object saveWithDocument = true; //默认//使⽤InlineShapes.AddPicture⽅法(【即“嵌⼊型”】)插⼊图⽚wordDoc.InlineShapes.AddPicture(filename, ref linkToFile, ref saveWithDocument, ref range);wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;//居中显⽰图⽚//设置图⽚宽⾼的绝对⼤⼩//wordDoc.InlineShapes[1].Width = 200;//wordDoc.InlineShapes[1].Height = 150;//按⽐例缩放⼤⼩wordDoc.InlineShapes[1].ScaleWidth = 20;//缩⼩到20% ?wordDoc.InlineShapes[1].ScaleHeight = 20;//在图下⽅居中添加图⽚标题wordDoc.Content.InsertAfter("\n");//这⼀句与下⼀句的顺序不能颠倒,原因还没搞透wordApp.Selection.EndKey(ref unite, ref Nothing);wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;wordApp.Selection.Font.Size = 10;//字体⼤⼩wordApp.Selection.TypeText("图1 测试图⽚\n");#endregion#region添加表格、填充数据、设置表格⾏列宽⾼、合并单元格、添加表头斜线、给单元格添加图⽚wordDoc.Content.InsertAfter("\n");//这⼀句与下⼀句的顺序不能颠倒,原因还没搞透wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到⽂档末尾wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;//object WdLine2 = MSWord.WdUnits.wdLine;//换⼀⾏;//wordApp.Selection.MoveDown(ref WdLine2, 6, ref Nothing);//向下跨15⾏输⼊表格,这样表格就在⽂字下⽅了,不过这是⾮主流的⽅法 //设置表格的⾏数和列数int tableRow = 6;int tableColumn = 6;//定义⼀个Word中的表格对象MSWord.Table table = wordDoc.Tables.Add(wordApp.Selection.Range,tableRow, tableColumn, ref Nothing, ref Nothing);//默认创建的表格没有边框,这⾥修改其属性,使得创建的表格带有边框table.Borders.Enable = 1;//这个值可以设置得很⼤,例如5、13等等//表格的索引是从1开始的。

用VC6.0编写Word插件(Office2K、XP、03)

用VC6.0编写Word插件(Office2K、XP、03)

用VC6.0编写Wo rd插件(O ffi ce2K、XP、03)作者:hjp hy源代码下载最近因为工作的需要,学习了一下Off ic e插件的编写方法。

在走了不少弯路以后,最后终于把编写插件的原理给搞清楚了,不敢独享,拿出来跟大家共享一下。

下面就以Word 2003为例,向大家简单介绍一下。

第一步,利用向导生成一个AT L COM App Wiz ard的新工程。

图1在向导的第一个对话框中,服务器类型选择Dy na mi c Li nk Li bra ry(DLL),然后单击Fi nish即可。

图2然后,选取菜单Ins ert->N ew AT L Ob je ct项,在弹出的AT L对象向导对话框中选中相应O bj ect s对应右侧的Sim p le Ob j ect 选项,点击下一步。

图3在弹出的对话框中Sho rt Nam e中输入相应名称,点确定完成插入AT L对象。

图4这样一个简单的基于AT L的COM组件工程就建立成功了。

第二步,通过导入类型库来实现_IDT E xt ens ibi l it y2接口。

在C l assVi ew中的新加的类上点鼠标右键,在弹出的右键菜单中选Imp l em ent Int erf ac e项。

图5在弹出的实现接口对话框中点击Ad d T y p elib图6在弹出的Br owse T y p e L ibr ar ies对话框中,选取M ic rosoft Ad d-in D esi gne r(1.0)子项,点OK按钮图7在弹出的接口列表对话框中选中_IDT E xt ens ibi l it y2接口,点OK按钮完成导入这样的话,系统将会自动为你生成空的五个所需接口函数,分别是On Con ne ct ion、OnD isco nn ect i on、O nAddI nsUp dat e、OnSt a rt up Comp let e、On Be gin Shut down。

VC++导入导出word程序

VC++导入导出word程序

VC++导入导出word程序应用程序运行界面如图所示:一、首先在VC6.0中创建MFC应用程序,类型为基本对话框,MFC库选静态的DLL(否则编译之后在其他电脑上无法运行),其他选项默认。

然后按Ctrl+W调出MFC类向导,从Word和Exce的安装根目录下导入Word和Excel的库(word:MSWord.dll,Excel:excel.exe(选全部文件下拉列表才能看到)),然后分别导入Word中的四个类(_Application,Documents,_Document,Range)和Excel中的五个类(_Application,Workbooks,Worksheets,_Workbook,_Worksheet,Range),注意导入Excel中的_Application和Range类时要重命名(_Application_Excel,Range_Excel),要不然和Word导入的类重名了。

/************************************************************** **********//* 工程名为Nichole7 *//************************************************************** **********/二、首先在CNichole7App::InitInstance()中最前面加入:/************************************************************** **********//* 初始化COM库 *//************************************************************** **********/if (::CoInitialize(NULL) != S_OK){AfxMessageBox("初始化COM支持库失败!");exit(1);}然后在return FALSE前面加入:/************************************************************** **********//* 释放COM库*//************************************************************** *********/::CoUninitialize();三、头文件#include "msword.h" //与Word操作相关的类#include "excel.h" //与Excel操作相关的类#include "afxtempl.h" //CMap类的头文件#include //新增加了一个头文件,为使用CComVariant替代VARIANT做准备/***1.建立工程文件不要以excel命名,因为添加类的时候会默认生成excel.h和excel.cpp文件**2.添加excel的类时,要改名,要不然_Application和Range 类会重定义(因为word里也会添加进有同样的类)*/#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif#define LINE_SIZE 100 //Word行数(以换行符分隔)#define EXCEL_SIZE 50 //Excel的单元格数#define ITEM_COUNT 10 //歧义词最多项数BOOL InitWord(_Application &wordApp);BOOL InitExcel(_Application_Excel &_app);int Split(char *token,CString strs,CString *str,char *seps);void ExtractString(CMap&stringMap,CMap &ItemMap,const CString strs,/*const CString seps=":"*/ const CString seps);BOOL OpenExcelFile(LPCTSTR xlsFileName,_Application_Excel &_app,LPDISPATCH &lpDispatch,Workbooks &_books,_Workbook &_book,Worksheets &_sheets);BOOL GetCurrentSheet(LPDISPATCH &lpDispatch,_Workbook &_book,_Worksheet&_sheet);int GetInsertPoint(LPDISPATCH &lpDispatch,_Workbook &_book,_Worksheet&_sheet,Range_Excel &_range);CString GetCellValue(LPDISPATCH &lpDispatch,_Workbook &_book,_Worksheet&_sheet,Range_Excel &_range,long row,long col);BOOL WriteExcel(CString strValue,LPDISPATCH &lpDispatch,_Workbook&_book,_Worksheet &_sheet,Range_Excel &_range,long row,long col);void InitStringMap(CMap &stringMap); CString FindValue(CMap &stringMap,CString &key);void FindKeys(CMap &stringMap,CString*keys,CString &value);四、在Nichole7Dlg.cpp中加入如下代码:/************************************************************** ******************************//* 主要的读取和写入过程都在此函数内完成,点击“写入Excel”按钮时调用*//************************************************************** ******************************/void CNichole7Dlg::OnOK(){// TODO: Add extra validation hereCString wFileName,eFileName;/************************************************************** ************//* m_wName,m_eName分别是两个编辑框的控件变量 *//************************************************************** ************/m_wName.GetWindowText(wFileName);m_eName.GetWindowText(eFileName);if (wFileName.IsEmpty())AfxMessageBox("请选择Word文档!");else if (eFileName.IsEmpty())AfxMessageBox("请选择Excel文档!");else{CFileFind finder;BOOL bResult1,bResult2;bResult1=finder.FindFile(wFileName);bResult2=finder.FindFile(eFileName);if (!bResult1){AfxMessageBox("指定的Word文件不存在!");return; //return与exit(1)的不同,后者退出整个应用程序}else if (!bResult2){AfxMessageBox("指定的Excel文件不存在!");return;}//定义变量_Application wordApp;Documents docs;_Document doc;Range aRange;//操作WordCOleVariantvTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_P ARAMNOTFOUND, VT_ERROR);if (InitWord(wordApp)==false){AfxMessageBox("初始化Word支持库失败!");exit(1);}docs=wordApp.GetDocuments();doc=docs.Open(COleVariant(wFileName),vFalse,vTrue,vFalse ,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);aRange=doc.Range(vOpt,vOpt);//AfxMessageBox(aRange.GetText());//这里GetText得到的就是word文件的纯文本了,你可以将其写到txt文件中CString strs=aRange.GetText(); //这里GetText得到的就是word的纯文本了,你可以将其写到txt文件中char *token=NULL;CString str[LINE_SIZE];char seps[]="\r"; //不能用"\n",不知为何?int line_size=Split(token/*需要初始化*/,strs,str,seps);CMap stringMap;CMap ItemMap; //保存从Word返回的键-值对InitStringMap(stringMap);const CString stops=":";for (int i=0/*退出for循环时,i仍然存在*/; i<="" p="">{ExtractString(stringMap,ItemMap,str[i],stops);}aRange.ReleaseDispatch();doc.ReleaseDispatch();docs.ReleaseDispatch();VARIANT SaveChanges,OriginalFormat,RouteDocument; //定义调用QUIT时使用的参数SaveChanges.vt=VT_BOOL; //设置退出WORD时候的保存参数SaveChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置::VariantInit(&OriginalFormat); //清空变量RouteDocument.vt=VT_EMPTY; //清空变量的另一种方法/************************************************************** ************************************* ************************/ /* 采用注释掉的方法会出现:vc调用并关闭word时,提示“此文件正由另一个应用程序或用户使用” normal.dot** 解决办法是将wordApp.Quit()里的三个参数更改一下*//************************************************************** ************************************* ************************/ //wordApp.Quit(vOpt,vOpt,vOpt);wordApp.Quit(&SaveChanges,&OriginalFormat,&RouteDoc ument);wordApp.ReleaseDispatch();//定义变量_Application_Excel _app;Workbooks _books;Worksheets _sheets;_Workbook _book;_Worksheet _sheet;Range_Excel _range;LPDISPATCH lpDispatch;//操作Excelif (InitExcel(_app)==false){AfxMessageBox("初始化Excel支持库失败!");exit(1);}//打开Excel文件if(!OpenExcelFile(eFileName,_app,lpDispatch,_books,_book,_sheet s)){AfxMessageBox("打开Excel失败!");exit(1);}//得到第一行的值,保存在strArray[0...j-2]中CString strArray[EXCEL_SIZE];CString strTemp;for (int j=1;;j++){strTemp=GetCellValue(lpDispatch,_book,_sheet,_range,1,j);strTemp.TrimLeft();strTemp.TrimRight();if (strTemp.GetLength()==0)break;elsestrArray[j-1]=strTemp;}//得到写入Excel的位置intinsertPoint=GetInsertPoint(lpDispatch,_book,_sheet,_range);//将Word中读出的内容写入Excel指定开始位置CString strMap;for (int k=0;k<=j-2;k++){CString strValue;strMap=strArray[k];ItemMap.Lookup((LPCTSTR)strMap,strValue/*保存返回值*/);strValue.TrimLeft();strValue.TrimRight();WriteExcel(strValue,lpDispatch,_book,_sheet,_range,insertPoi nt,k+1);}//_book.SaveCopyAs(COleVariant("D:\\1.xls")); //相当于另存为//相当于excel菜单的保存COleVariantcovOptional((LONG)DISP_E_PARAMNOTFOUND,VT_ERROR);//_book.SetSaved(true);_app.SetVisible(true);_app.SetUserControl(true);_book.SaveAs(COleVariant(eFileName),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptio nal);_range.ReleaseDispatch();_sheet.ReleaseDispatch();_sheets.ReleaseDispatch();/************************************************************** ************************************ **************//* 我们使用CComVariant替代VARIANT,CComVariant是一个模板类。

Microsoft Word - 定时器vc6

Microsoft Word - 定时器vc6

1、打开VC++6.0软件,如下图所示2、选择“File”菜单选项,点击“New”子菜单选项,如下图所示3、(1)选择“Projects”选项,(2)选中“MFC AppWizard(exe)”选项,(3)而后选择你自己的项目要存放的地址“Location”,(4)给出你自己项目的命名;如下图所示4、选中“Single document”选项,而后点击“Next”选项,如下图所示5、点击“Next”选项,如下图所示6、点击“Next”选项,如下图所示7、点击“Next”选项,如下图所示8、点击“Next”选项,如下图所示如下图所示10、生成的界面如下,主要包括“ClassView”界面、“ResourceView”界面和“FileView”界面;我们暂时只和“ResourceView”界面下的Dialog资源下的“IDD_JISUANQI_FORM”界面打交道,如下图所示。

键删除掉它。

12、在工具栏上选择“Edit Box”控件,拖入到界面上去,如下图所示13、右键选择刚拖上来的“Edit Box”控件,选择“Properties”选项,如下图所示14.点击 view 如图进行如下操作15.双击IDC_EDIT_DINGSHIQI ,如图进行如下操作确定16.右键选择刚刚拖上来的 button 控件,选择properties 选项,如下图所示17.再拖入一个button 控件,选择properties 选项,进行如下操作:18.重新拖入一个edit 控件,右击properties 选项,进行如下操作19.选择菜单栏view ,进入进行如下操作:20.重新拖入一个button 控件,右击properties 进行如下操作21.拖入一个button 控件,进行如下操作22.双击启动定时器1 ,如图选择ok,如图添加代码:SetTimer(1,1000,NULL);23.双击停止定时器1,进行如图操作:添加代码KillTimer(1);24.双击启动定时器2 ,进行如图操作添加代码SetTimer(2,500,null);25.双击停止定时器2,进行如图操作:添加代码KillTimer(2);25.点击菜单栏view 选项,如图:点击Add Function,确定;添加如下代码:。

VC++操作OfficeWord中Saveas()函数应用说明

VC++操作OfficeWord中Saveas()函数应用说明在VC++操作word中经常用到_Document下的saveas(),但是其包含的参数个数缺老有问题,在某些版本11个可以运行,有些12个,有些需要16个。

由于小弟初学,只搞了16个参数的,所以在此举例说明:void _Document::SaveAs (VARIANT* FileName,VARIANT* FileFormat,VARIANT* LockComments,VARIANT* Password,VARIANT* AddT oRecentFiles,VARIANT* WritePassword,VARIANT* ReadOnlyRecommended,VARIANT* EmbedTrueTypeFonts,VARIANT* SaveNativePictureFormat,VARIANT* SaveFormsData,VARIANT* SaveAsAOCELetter,VARIANT* Encoding,VARIANT* InsertLineBreaks,VARIANT* AllowSubstitutions,VARIANT* LineEnding,VARIANT* AddBiDiMarks)具体参数说明设置如下:FileName文档的名称。

默认值是当前文件夹名和文件名。

如果文档在以前没有保存过,则使用默认名称(例如,Doc1.doc)。

如果已经存在具有指定文件名的文档,则会在不先提示用户的情况下改写文档。

FileFormat文档的保存格式。

可以是任何 WdSaveFormat 值。

要以另一种格式保存文档,请为 SaveFormat 属性指定适当的值。

LockComments如果为 true,则锁定文档以进行注释。

默认值为 false。

Password用来打开文档的密码字符串。

(请参见下面的备注。

)AddToRecentFiles如果为true,则将该文档添加到“文件”菜单上最近使用的文件列表中。

用VC实现Word文档自动化

用VC实现Word文档自动化
姜照林
【期刊名称】《嘉兴学院学报》
【年(卷),期】2007(019)003
【摘要】用Word进行报表的生成和打印在某些方面具有其他软件无法相比的优点.该文主要研究了在VC环境下对Word进行操纵,实现Word文档自动化并且对Word文档进行格式化等操作,给出实现的关键代码,并以一个医院中的具体应用为实例进行了详细的分析介绍.
【总页数】4页(P68-71)
【作者】姜照林
【作者单位】嘉兴学院信息工程学院,浙江嘉兴,314001
【正文语种】中文
【中图分类】TP391.12
【相关文献】
1.VC++于Word文档外实现自动更正内容的编辑 [J], 梁海珍
2.VC++中实现Excel自动化编程 [J], 刘波
3.基于MVC模式的办公自动化系统的设计与实现 [J], 钟旺伟;黄小鸥
4.VC++实现Excel操作自动化的方法研究与应用 [J], 余艳艳; 周明刚
5.地调自动化系统AVC与风电场接口的实现 [J], 魏艳
因版权原因,仅展示原文概要,查看原文内容请购买。

MFCVC++调用word进行报表制作

MFC/VC++调用word进行报表制作使用word进行数据报告的制作可谓非常方便,word具有非常强大的编辑、排版功能。

使用word能够制作出内容丰富、样式精美的报告。

我们在工作中当然会有报表报告的需求,如果能够在MFC/VC++里面能够调用word进行word格式报告的自动生成,岂不是一件非常惬意的事情。

我在工作当中需要对大量的数据或者各种测试数据进行统计分析,最终的统计分析结果总归要汇总为一份报告,不管是内部使用也好还是外部提供给客户也好,一份内容翔实、格式精美的报告自然必不可少。

我对MFC/VC++也不是高手,只是业余爱好自己动动手做些东西。

自然,低于VC操作word可谓完全没有经验,在网络上面也查找了很多资料,都是些只言片语,不能真正的领略通过VC使用word的方法。

于是自己摸索了几个礼拜,可谓耗时甚长,劳心劳力啊。

MS的东西,封装的也太严实了,对于函数部分只有些许的简单介绍,往往看的云里雾里。

没有实践还是不行啊!体会自己的经历,虽然辛苦但也有收获。

不想其他朋友再继续走我走过的路,浪费时间、精力,故成文以共享。

废话少说,进入正题吧。

第一步,当然我们需要首先导入word需要的库。

通过ClassWizard->Add C lass选择From a Type Library…定位需要的库文件导入。

本例应该使用C:\Pr ogram Files\Microsoft Office\OFFICE11\MSWORD.OLB,在这里尽可选择所有的类导入,反正用的时候都有了,呵呵。

完成这一步,我们得到两个文件ms word.h和msword.cpp,那就加入你的工程吧。

说明:如果需要在VC++/MFC开发程序操作word/excel等office元素,那么需要对必要的类型库进行导入.下面是office系列的类型库参考,导入类型库时候请选择注意:这些类型库的默认位置是:Dao350.dll 和Dao360.dll 的默认位置是C:\Program Files\Common File s\Microsoft Shared\Dao。

C_操作Word代码实例

C#操作word我们都知道,Office 是基于COM 组件技术开发的,属于非托管程序,然而C# 使用的都是托管程序,那么如何使用非托管的COM 组件就是我们操作WORD 的第一个问题。

所幸的是, .NET FRAMEWORK 提供了一种不同种类类库的转换工具tlbimp,exe ,通过这个转换工具,我们可以把COM 组件转化为 .NET FRAMEWORK 可以直接调用的DLL 文件。

接下来就是转化工作了,Office 组件都可以在C:Program FilesMicrosoft Office 目录下找到,当然安装的Office 版本不同,子目录是不一样的。

笔者使用的是Office 2007 ,可以在C:Program FilesMicrosoft OfficeOffice12 目录下找到MSWORD.OLB ,这个是WORD 组件的类库文件,还可以找到MSACC.OLB 操作ACCESS ,MSPPT.OLB 操作PPT ,XL5CHS32.OLB 操作EXCEL 。

载入不同的组件就可以完成对不同Office 组件的操作。

使用tlbimp,exe 工具转化MSWORD.OLB 文件后可以得到三个DLL 文件,Office ,dll ,Visual BasicIDE.dll ,Word .dll 。

最后在编译文件的时候,记得将这三个DLL 文件载入,命令如下:csc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:office .dll /r:vbide.dll /r:word .dll word .cs笔者使用Visual 2005 编译环境,通过IDE 提供的功能可以大大简化我们对组件转化的工作,并且在编译时也不需要输入那么繁杂的语句,非常方便了。

下面介绍一下IDE 载入Office 组件的方式。

在菜单栏选择“项目”-“添加引用”,弹出的窗口中我们可以选择“ COM ”选项卡,找到Microsoft Office 12.0 Object Library (Office 2003/2007 需要使用12.0 版的,如果你使用的是Office 2000 或者更低的版本,只要载入10.0 版的就可以了),确定后引入. 也可以在“浏览”选项卡下找到我们上面提到的MSWORD.OLB 文件,引入即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// wordDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "word.h"
#include "wordDlg.h"
#include "msword8.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CwordDlg 对话框

CwordDlg::CwordDlg(CWnd* pParent /*=NULL*/)
: CDialog(CwordDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CwordDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CwordDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CwordDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

// CwordDlg 消息处理程序
BOOL CwordDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CwordDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()),
0);

// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CwordDlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}
void CwordDlg::OnBnClickedButton1()
{
CString strNewFile;

CFileDialog fileDlg(FALSE, _T("*.doc"), NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Word文件格式
(*.doc)|*.doc|All Files(*.*)|*.*||"), NULL);

if(fileDlg.DoModal() != IDOK)
return ;

strNewFile = fileDlg.GetPathName();

if(!CopyFile(_T("Doc1.doc"), strNewFile, false))
{
AfxMessageBox(_T("建立输出文档:") + strNewFile + _T("失败!"));
return ;
}

_Application wordApp;
if(!AfxGetThreadState()->m_bNeedTerm)
{
if(!AfxOleInit())
{
return ;
}
}

if(!wordApp.CreateDispatch(_T("Word.Application")))
{
return ;
}
wordApp.SetVisible(TRUE);

Documents documents;
documents.AttachDispatch(wordApp.GetDocuments());
_Document docActive;

COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
LPDISPATCH lpDisp = documents.Open(COleVariant(strNewFile), vFalse,
vFalse, vTrue, vOptional, vOptional, vFalse,
vOptional, vOptional, vOptional);
docActive.AttachDispatch(lpDisp);

wordApp.SetVisible(TRUE);
Selection select=wordApp.GetSelection();
select.TypeText(_T("aaa"));
docActive.Save();

docActive.ReleaseDispatch();
wordApp.ReleaseDispatch();
}

相关文档
最新文档