word_wordpress - CSDN
word 订阅
Microsoft Office Word是微软公司的一个文字处理器应用程序。它最初是由Richard Brodie为了运行DOS的IBM计算机而在1983年编写的。随后的版本可运行于Apple Macintosh (1984年)、SCO UNIX和Microsoft Windows (1989年),并成为了Microsoft Office的一部分。Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。一直以来,Microsoft Office Word 都是最流行的文字处理程序。作为 Office 套件的核心程序, Word 提供了许多易于使用的文档创建工具,同时也提供了丰富的功能集供创建复杂的文档使用。哪怕只使用 Word 应用一点文本格式化操作或图片处理,也可以使简单的文档变得比只使用纯文本更具吸引力。 展开全文
Microsoft Office Word是微软公司的一个文字处理器应用程序。它最初是由Richard Brodie为了运行DOS的IBM计算机而在1983年编写的。随后的版本可运行于Apple Macintosh (1984年)、SCO UNIX和Microsoft Windows (1989年),并成为了Microsoft Office的一部分。Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。一直以来,Microsoft Office Word 都是最流行的文字处理程序。作为 Office 套件的核心程序, Word 提供了许多易于使用的文档创建工具,同时也提供了丰富的功能集供创建复杂的文档使用。哪怕只使用 Word 应用一点文本格式化操作或图片处理,也可以使简单的文档变得比只使用纯文本更具吸引力。
信息
发行商
微软(Microsoft)
销    售
微软(Microsoft)
发行日期
1983年
原版名称
Microsoft office Word
发行阶段
正式版
开发商
微软(Microsoft)
Microsoft Office Word格式
Microsoft Word X (Mac OS X)Microsoft Word在当前使用中是占有巨大优势的文字处理器,这使得Word专用的档案格式Word 文件(.doc)成为事实上最通用的标准。Word文件格式的详细资料并不对外公开。Word文件格式不只一种,因为随Word软件本身的更新,文件格式也会或多或少的改版,新版的格式不一定能被旧版的程序读取(大致上是因为旧版并未内建支援新版格式的能力)。微软已经详细公布Word 97的DOC格式,但是较新的版本资料仍未公开,只有公司内部、政府与研究机构能够获知。业界传闻说某些Word文件格式的特性甚至连微软自己都不清楚。其他与Word竞争的办公室作业软件,都必须支援事实上最通用的Word专用的档案格式。因为Word文件格式的详细资料并不对外公开,通常这种兼容性是藉由逆向工程来达成。许多文字处理器都有汇出、汇入Word档案专用的转换工具,譬如AbiWord或OpenOffice。(参照文本编辑器当中关于其他竞争软件的说明。)Apache Jakarta POI是一个开放原始码的Java数据库,其主要目标是存取Word的二进制文件格式。不久前,微软自己也提供了检视器,能够不用Word程序就检视Word文件。例:Word Viewer 2003。Microsoft office Word 97到Microsoft office Word 2003之前的Word文件格式都是二进制文件格式。不久以前,微软声明他们接下来将以XML为基础的档案格式作为他们办公室套装软件的格式。Word 2003提供WordprocessingML的选项。这是一种公开的XML档案格式,由丹麦政府等机构背书支持。Word 2003的专业版能够直接处理非微软的档案规格。跟其它Microsoft Office程序一样,Word可使用固定宏语言(宏语言)来高度定制。(最初是WordBasic,但自从Microsoft office Word 97以来就变成Visual Basic)然而,这种性能也可以在文档中嵌入就像梅利莎蠕虫的电脑病毒。这就是电脑用户需要安装防火墙和反病毒软件的另一个原因。Microsoft's security advice人们所知道的第一个感染Microsoft Word文档的病毒叫做概念病毒,一个相对危害很小的病毒,它的出现是为了证明宏病毒出现的可能性。
收起全文
  • Word初学者、办公文秘、写作者、各行各业与Word打交道的人 课程概述 特别说明: 本课程隶属于“365天个人职场技能成长训练营”,如果已经购买该课程,则不必购买本课程,请勿重复购买。 课程目标 ...
  • Word从小白变小能手

    2019-05-22 11:30:53
    本次课程是以Word在职场中的应用为切入点,通过查漏补缺、系统性学习的方式,帮助学员以企业级数据和应用为载体,从而系统的提升自身硬技能。循序渐进地引导学员找到方向、理清思路、系统全面地掌握Word关键技术与...
  • 教你玩转Word教程

    2019-06-24 13:02:40
    教你玩转Word教程
  • 1、办公也可以更高级,掌握自动化办公让文件处理更高效,让自己在职场中更具竞争力! 2、本课程针对的是白领人员... 4、重点:shuitl、send2trash、zipfile、Excel、BeautifulSoup、Selenium、PDF、Word、CSV、JSON
  • 其实你还不懂Word

    2020-04-03 14:31:16
    本课程根据多年的工作及企业培训经验,总结了大多数人使用Word的误区及存在的问题。以如何提高排版效率为终目的,从排版基本原则及规范化入手,结合实例讲述排版的思想、理念、技巧、功能、方法,力求以合理的结构、...
  • c#操作word

    2019-02-22 16:33:53
    本文中用C#来操作Word,包括:   创建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
     

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using MSWord = Microsoft.Office.Interop.Word;
    using System.IO;
    using System.Reflection;

    namespace Console_WordSkill_All
    {
        class Program
        {
            static void Main(string[] args)
            {
                object path;                              //文件路径变量
                string strContent;                        //文本内容变量
                MSWord.Application wordApp;                   //Word应用程序变量 
                MSWord.Document wordDoc;                  //Word文档变量
                
                path = Environment.CurrentDirectory + "\\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;//页眉位置

                //设置页眉
                wordApp.ActiveWindow.View.Type = MSWord.WdViewType.wdNormalView;//普通视图(即页面视图)样式
                wordApp.ActiveWindow.View.SeekView = MSWord.WdSeekView.wdSeekPrimaryHeader;//进入页眉设置,其中页眉边距在页面设置中已完成
                wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphRight;//页眉中的文字右对齐


                //插入页眉图片(测试结果图片未插入成功)
                wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
                string headerfile = @"C:\Users\xiahui\Desktop\OficeProgram\3.jpg";
                MSWord.InlineShape shape1 = wordApp.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(headerfile, ref Nothing, ref Nothing, ref Nothing);
                shape1.Height = 5;//强行设置貌似无效,图片没有按设置的缩放——图片的比例并没有改变。
                shape1.Width = 20;
                wordApp.ActiveWindow.ActivePane.Selection.InsertAfter("  文档页眉");//在页眉的图片后面追加几个字
                
                //去掉页眉的横线
                wordApp.ActiveWindow.ActivePane.Selection.ParagraphFormat.Borders[MSWord.WdBorderType.wdBorderBottom].LineStyle = MSWord.WdLineStyle.wdLineStyleNone;
                wordApp.ActiveWindow.ActivePane.Selection.Borders[MSWord.WdBorderType.wdBorderBottom].Visible = false;
                wordApp.ActiveWindow.ActivePane.View.SeekView = MSWord.WdSeekView.wdSeekMainDocument;//退出页眉设置
                #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";
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                wordDoc.Paragraphs.Last.Range.Text = "我再加一行试试,这里不加'\\n'";
                //直接添加段,不是覆盖( += )
                wordDoc.Paragraphs.Last.Range.Text += "不会覆盖的,";

                //添加在此段的文字后面,不是新段落
                wordDoc.Paragraphs.Last.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";
                wordDoc.Paragraphs.Last.Range.Font.Name = "黑体";
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //写入加粗文本
                strContent = "这是粗体文本\n"; //
                wordApp.Selection.EndKey(ref unite, ref Nothing);//这一句不加,有时候好像也不出问题,不过还是加了安全
                wordDoc.Paragraphs.Last.Range.Font.Bold = 1;
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //写入15号字体文本
                strContent = "我这个文本的字号是15号,而且是宋体\n";
                wordApp.Selection.EndKey(ref unite, ref Nothing);
                wordDoc.Paragraphs.Last.Range.Font.Size = 15;
                wordDoc.Paragraphs.Last.Range.Font.Name = "宋体";
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //写入斜体文本
                strContent = "我是斜体字文本\n";
                wordApp.Selection.EndKey(ref unite, ref Nothing);
                wordDoc.Paragraphs.Last.Range.Font.Italic = 1;
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //写入蓝色文本
                strContent = "我是蓝色的文本\n";
                wordApp.Selection.EndKey(ref unite, ref Nothing);
                wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlue;
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //写入下划线文本
                strContent = "我是下划线文本\n";
                wordApp.Selection.EndKey(ref unite, ref Nothing);
                wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineThick;
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //写入红色下画线文本
                strContent = "我是点线下划线,并且下划线是红色的\n";
                wordApp.Selection.EndKey(ref unite, ref Nothing);
                wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineDottedHeavy;
                wordDoc.Paragraphs.Last.Range.Font.UnderlineColor = MSWord.WdColor.wdColorRed;
                wordDoc.Paragraphs.Last.Range.Text = strContent;

                //取消下划线,并且将字号调整为12号
                strContent = "我他妈不要下划线了,并且设置字号为12号,黑色不要斜体\n";
                wordApp.Selection.EndKey(ref unite, ref Nothing);
                wordDoc.Paragraphs.Last.Range.Font.Size = 12;
                wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineNone;
                wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlack;
                wordDoc.Paragraphs.Last.Range.Font.Italic = 0;
                wordDoc.Paragraphs.Last.Range.Text = strContent;
                

                #endregion


                #region 插入图片、居中显示,设置图片的绝对尺寸和缩放尺寸,并给图片添加标题

                wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
                //图片文件的路径
                string filename = Environment.CurrentDirectory + "\\6.jpg";
                //要向Word文档中插入图片的位置
                Object range = wordDoc.Paragraphs.Last.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开始的。
                wordDoc.Tables[1].Cell(1, 1).Range.Text = "列\n行";
                for (int i = 1; i < tableRow; i++)
                {
                    for (int j = 1; j < tableColumn; j++)
                    {
                        if (i == 1)
                        {
                            table.Cell(i, j + 1).Range.Text = "Column " + j;//填充每列的标题
                        }
                        if (j == 1)
                        {
                            table.Cell(i + 1, j).Range.Text = "Row " + i; //填充每行的标题
                        }
                        table.Cell(i + 1, j + 1).Range.Text = i + "行 " + j + "列";  //填充表格的各个小格子
                    }
                }


                //添加行
                table.Rows.Add(ref Nothing);
                table.Rows[tableRow + 1].Height = 35;//设置新增加的这行表格的高度
                //向新添加的行的单元格中添加图片
                string FileName = Environment.CurrentDirectory + "\\6.jpg";//图片所在路径
                object LinkToFile = false;
                object SaveWithDocument = true;
                object Anchor = table.Cell(tableRow + 1, tableColumn).Range;//选中要添加图片的单元格
                wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);

                //由于是本文档的第2张图,所以这里是InlineShapes[2]
                wordDoc.Application.ActiveDocument.InlineShapes[2].Width = 50;//图片宽度
                wordDoc.Application.ActiveDocument.InlineShapes[2].Height = 35;//图片高度
                
                // 将图片设置为四周环绕型
                MSWord.Shape s = wordDoc.Application.ActiveDocument.InlineShapes[2].ConvertToShape();
                s.WrapFormat.Type = MSWord.WdWrapType.wdWrapSquare;


                //设置table样式
                table.Rows.HeightRule = MSWord.WdRowHeightRule.wdRowHeightAtLeast;//高度规则是:行高有最低值下限?
                table.Rows.Height = wordApp.CentimetersToPoints(float.Parse("0.8"));// 

                table.Range.Font.Size = 10.5F;
                table.Range.Font.Bold = 0;

                table.Range.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;//表格文本居中
                table.Range.Cells.VerticalAlignment = MSWord.WdCellVerticalAlignment.wdCellAlignVerticalBottom;//文本垂直贴到底部
                //设置table边框样式
                table.Borders.OutsideLineStyle = MSWord.WdLineStyle.wdLineStyleDouble;//表格外框是双线
                table.Borders.InsideLineStyle = MSWord.WdLineStyle.wdLineStyleSingle;//表格内框是单线

                table.Rows[1].Range.Font.Bold = 1;//加粗
                table.Rows[1].Range.Font.Size = 12F;
                table.Cell(1, 1).Range.Font.Size = 10.5F;
                wordApp.Selection.Cells.Height = 30;//所有单元格的高度

                //除第一行外,其他行的行高都设置为20
                for (int i = 2; i <= tableRow; i++)
                {
                    table.Rows[i].Height = 20;
                }

                //将表格左上角的单元格里的文字(“行” 和 “列”)居右
                table.Cell(1, 1).Range.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphRight;
                //将表格左上角的单元格里面下面的“列”字移到左边,相比上一行就是将ParagraphFormat改成了Paragraphs[2].Format
                table.Cell(1, 1).Range.Paragraphs[2].Format.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;

                table.Columns[1].Width = 50;//将第 1列宽度设置为50

                //将其他列的宽度都设置为75
                for (int i = 2; i <= tableColumn; i++)
                {
                    table.Columns[i].Width = 75;
                }


                //添加表头斜线,并设置表头的样式
                table.Cell(1, 1).Borders[MSWord.WdBorderType.wdBorderDiagonalDown].Visible = true;
                table.Cell(1, 1).Borders[MSWord.WdBorderType.wdBorderDiagonalDown].Color = MSWord.WdColor.wdColorRed;
                table.Cell(1, 1).Borders[MSWord.WdBorderType.wdBorderDiagonalDown].LineWidth = MSWord.WdLineWidth.wdLineWidth150pt;

                //合并单元格
                table.Cell(4, 4).Merge(table.Cell(4, 5));//横向合并

                table.Cell(2, 3).Merge(table.Cell(4, 3));//纵向合并,合并(2,3),(3,3),(4,3)

                #endregion

                wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾

                wordDoc.Content.InsertAfter("\n");
                wordDoc.Content.InsertAfter("就写这么多,算了吧!2016.09.27");
                


                //WdSaveFormat为Word 2003文档的保存格式
                object format = MSWord.WdSaveFormat.wdFormatDocument;// office 2007就是wdFormatDocumentDefault
                //将wordDoc文档对象的内容保存为DOCX文档
                wordDoc.SaveAs(ref path, ref format, 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);
                //关闭wordDoc文档对象

                //看是不是要打印
                //wordDoc.PrintOut();

     

                wordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
                //关闭wordApp组件对象
                wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
                Console.WriteLine(path + " 创建完毕!");
                Console.ReadKey();


                //我还要打开这个文档玩玩
                MSWord.Application app = new MSWord.Application();
                MSWord.Document doc = null;
                try
                {
                    
                    object unknow = Type.Missing;
                    app.Visible = true;
                    string str = Environment.CurrentDirectory + "\\MyWord_Print.doc";
                    object file = str;
                    doc = app.Documents.Open(ref file,
                        ref unknow, ref unknow, ref unknow, ref unknow,
                        ref unknow, ref unknow, ref unknow, ref unknow,
                        ref unknow, ref unknow, ref unknow, ref unknow,
                        ref unknow, ref unknow, ref unknow);
                    string temp = doc.Paragraphs[1].Range.Text.Trim();
                    Console.WriteLine("你他妈输出temp干嘛?");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                wordDoc = doc;
                wordDoc.Paragraphs.Last.Range.Text += "我真的不打算再写了,就写这么多吧";

                Console.ReadKey();
            }

        }
    }

     

    展开全文
  • c++ 操作Word

    2015-07-12 17:58:50
    你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序.........
    摘要:
    使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以一步一步地掌握这个技术。祝朋友们学习快乐。

    MSDN搜:microsoft.office.interop.word


    使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以一步一步地掌握这个技术。祝朋友们学习快乐。

    一、概念

    Microsoft 的 Office 产品中,都提供了OLE Automation 自动化程序的接口。如果你使用VB,VBA 和 Script 脚本调用 Office 功能的话,其实比使用 VC 调用要简单的多。比如在 WORD 中,调出菜单“工具(T)\宏(M)\录制新宏(R)”,这时候它开始记录你在 WORD 中任何菜单和键盘的操作,把你的操作过程保存起来,以便再次重复调用。而保存这些操作的记录,其实就是使用了 VBA 程序(Visual Basic for Application)。而我们下面要实现的功能,也同样要参考 VBA 的方法。

    二、结构层次

    为了更有逻辑,更有层次地操作 Office,Microsoft 把应用(Application)按逻辑功能划分为如下的树形结构

    Application(WORD 为例,只列出一部分)

      Documents(所有的文档)

            Document(一个文档)

                ......

      Templates(所有模板)

            Template(一个模板)

                ......

      Windows(所有窗口)

            Window

            Selection

            View

      Selection(编辑对象)

            Font

            Style

            Range

            ......

      ......

    只有了解了逻辑层次,我们才能正确的操纵 Office。举例来讲,如果给出一个VBScript语句是:

    application.ActiveDocument.SaveAs "c:\abc.doc"

    那么,我们就知道了,这个操作的过程是:第一步,取得Application;第二步,从Application中取得ActiveDocument;第三步,调用 Document 的函数 SaveAs,参数是一个字符串型的文件名。

    三、基本步骤

    (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 的版本,可以使用下表列出的类型库文件

    Office 版本和类型

    类型库文件

    Office 版本和类型

    类型库文件

    Access 97 Msacc8.olb PowerPoint 2000 Msppt9.olb
    Jet Database 3.5 DAO350.dll Word 2000 Msword9.olb
    Binder 97 Msbdr8.olb Access 2002 Msacc.olb
    Excel 97 Excel8.olb Excel 2002 Excel.exe
    Graph 97 Graph8.olb Graph 2002 Graph.exe
    Office 97 Mso97.dll Office 2002 MSO.dll
    Outlook 97 Msoutl97.olb Outlook 2002 MSOutl.olb
    PowerPoint 97 Msppt8.olb PowerPoint 2002 MSPpt.olb
    Word 97 Msword8.olb Word 2002 MSWord.olb
    Access 2000 Msacc9.olb Office Access 2003 Msacc.olb
    Jet Database 3.51 DAO360.dll Office Excel 2003 Excel.exe
    Binder 2000 Msbdr9.olb Graph 2003 Graph.exe
    Excel 2000 Excel9.olb Office 2003 MSO.dll
    Graph 2000 Graph9.olb Office Outlook 2003 MSOutl.olb
    Office 2000 Mso9.dll Office PowerPoint 2003 MSPpt.olb
    Outlook 2000 Msoutl9.olb Office Word 2003 MSWord.olb

    (4)选择类型库文件后,在弹出的对话窗中继续选择要添加的类。具体选择什么类,要看你将来在程序中打算调用什么功能。当然,你也可以不用考虑这么多,用鼠标和Shift键配合,全部选择也可以。

    (5)初始化COM。方法一,找到App的InitInstance()函数,在其中添加 AfxOleInit()函数的调用;方法二,在需要调用COM功能的地方 CoInitialize(NULL),调用完毕后 CoUninitialize()。

    (6)在你需要调用 Office 功能函数的 cpp 文件中

    #include   // 为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类

    #include "头文件.h"   // 具体的头文件名,是由装载类型库的文件名决定的。(鼠标双点包装类的文件,就可以看到)

    // 比如使用 msword9.olb类型库,那么头文件是 msword9.h

    (7)好了,现在开始写程序吧。另外要说明的是,步骤3和4,其实也可以使用 #import 方式引入类型库。

    四、实现技巧

    在书写调用 Office 函数的过程中,最困难的是确定函数的参数,一般情况下,参数都是 VARIANT 类型的变量指针。那么到底具体我们应该怎么写那?推荐两个方法,其一是阅读有关 VBA 的书籍;其二,是使用 Office 中自带的“宏”功能。强烈推荐大家使用第二个方法,把你要完成的功能,在 Office 的操作环境中,用宏录制下来,然后观察分析录制后的函数和参数,就可以在 VC 中使用了。举一个例子:

    1.ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _
    2., LockComments:=False, Password:="", AddToRecentFiles:=True, _
    3.WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
    4.SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
    5.False

    以上是在 Word 中录制的一个保存文件的宏,而在 VC 中对应的函数原型为

    1.void _Document::SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments,
    2.VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword,
    3.VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat,
    4.VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter)

    分析对照后,我们就能看出,参数 FileName 是字符串 VARIANT(VT_BSTR),参数 LockComments 是布尔VARIANT(VT_BOOL),等等。参数 FileFormat := wdFormatDocument 是什么类型那?其实这是一个表示保存的时候指定文件类型的常量,而且显然是 DWORD 类型VARIANT(VT_I4)。那么常量的数值又是多少那?很简单,写一个宏,调用函数 MsgBox 显示一下不就都知道啦?!

    五、步步为营

    特别提示一:编译执行前,一定要先关闭 KV 实时监视病毒的功能(KV 的程序会干扰我们的调用,瑞星的则没关系)。

    特别提示二:在例子程序中,为了表现程序的关键部分,没有或很少使用了条件判断。为了实现你程序的健壮性,请自己加上条件判断和异常处理。

    Step1:如何启动和关闭 WORD,及 VARIANT 的最基本的使用方法

    Step2:和 Step1 同样功能,用 CComVariant 改进了 VARIANT 的使用方式

    Step3:在 Step2 的基础上,新建一个 WORD 文档,并从程序中传送一些字符到 WORD

    Step4:在 Step3 的基础上,保存 WORD 文档

    Step5:一个小应用举例,把输入的汉字按照“笔画”排序

    Step6:一个小应用举例,盗窃正在使用的 WORD 文档

    以上这6个小程序中,都有详细的注释。大家阅读后慢慢体会并实验,你就可以自由地操纵任何一个 Office 啦。

    六、参考:Microsoft Office Development with Visual Studio 


    参考资料:

    ====================================================================

    1.实现技巧

    写Word文档,首先要从Word应用程序获取文档的类的对象,然后设置文档中接收文字位置,最后将文字写入Word文档。

    注:Microsoft Office 2003类型库msword.olb常用的_Application,_Document,Documents,Selection四个类

     

    按照添加类的步骤,将_Application应用程序类和Documents类和Selection类加进应用程序

    在View菜单中,点击ClassWizard,然后进入Automation标签中点击Add Class,选择From A Type Library。找到Microsoft Office 2003类型库msword.olb,选择_Application,_Document,_Documents,Selection四个类,如有其他需要(例如画表也可选择其他的类)。


    Documents类是文档对象集类,是所有Document对象的集合。使用Documents对象集合的Add方法可以新建一篇空白文档并将返回的Document 对象添至Documents对象集合之中。

    Add方法的原型声明如下:

    LPDISPATCH  Add(
    VARIANT* Template, 
    VARIANT* NewTemplate, 
    VARIANT* DocumentType, 
    VARIANT* Visible)

    参数Template,指定新文档使用的模板名,如果忽略此参数则使用Normal模板。
     
    参数NewTemplate,如果此属性设置为 True 则将文档作为模板打开。默认值为 False。
     
    参数DocumentType其值可取下列 WdNewDocumentType常量之一。
     
    WdNewBlankDocument 创建一个空白文档,默认值。
     
    WdNewEmailMessage 新建一个电子邮件信息。
     
    wdNewWebPage 新建一个Web页。
     
    参数Visible,如果此参数为True,Microsoft Word将在可见窗口打开文档。如果此参数为False,Word仍会打开此文档但文档窗口的Visible属性变为False,默认值为True。

     

    Selection类对象用于选定文档的文字,然后对选定部分进行操作,如设置文字的格式或键入文字。Selection 对象代表窗体中的选定内容,每个窗体中只能有一个Selection 对象而且只能激活一个 Selection 对象。Selection 对象代表的选定内容既可以是文档中的一个区域也可以仅仅是一个插入点。通过Selection对象的TypeText和GetText可对Word文档进行读写操作

    TypeText的函数作用为写Word文档,其函数的声明如下:

    void TypeText(LPCTSTR Text);
    GetText的函数的作用是读文档,其函数的声明如下:
    CString GetText();
     


     1. VC6的操作:


         在第(4)步后,VC6会自动生成"msword.h"和"msword.cpp"两个文件,同时在类视图中会生成你选择的类(譬如_Application _Document等等);


         此时你只要加入#include "msword.h",就完成了准备工作。


    2. VC2005\2008


         VC2005不会生成"msword.h"和"msword.cpp"这两个文件,取而代之的是生成"CApplication.h" "CDocument0.h"等一系列头文件;


         但如果你以为加入了#include "CApplication.h" ,便可以完成准备工作的话,那就大错特错了,此时编译会出现很多错误;


         该怎么办呢?


         把VC6中生成的"msword.h"和"msword.cpp"两个文件拷贝到VC2005工程文件夹目录中,并加入到工程中(项目-添加现有项);


         然后加上以下代码就一切OK了!

    ===================================================================


    作者:http://blog.csdn.net/zhaoshilei29/article/details/5946333

    ---------------------------------------

    首先,把我参考的两个地址放上来,博主写到很好,我这里只是把学到的东西做记录自己备查而已。

    用Visual C++操纵MS Word:

    http://www.cnblogs.com/scq2099yt/archive/2008/01/07/1028697.html

    MFC/VC++调用word进行报表制作:

    http://www.cnblogs.com/scq2099yt/archive/2008/01/07/1028717.html

     

    其次,说说重点:

    重点就是怎么把VBA_Sub MyReporter.bas里的VBA代码转换成WORD.OLE代码,上面的两篇文章写的很好,照着一步一步做就成了。

     

    下面,一步一步开始吧:


    1. 首先,要打开Word的宏记录功能。

    备注:在Word中,使用VBA为脚本的宏,可以使文件具有一定逻辑处理功能。例如自动生成及处理数据等。

     


    2. 然后创建一个新宏

     


    3. 记录一个宏,在记录好以后,可以对宏进行简单的编辑,想调试看运行结果时,点击“运行”按钮。这一步很重要,在把这个VBA脚本翻译成C++可执行的代码前,这里的逻辑就是最后生成Word文档的逻辑,因此,要仔细调试,把其中没有必要的步骤去除,尽量精简生成文档的步骤。

     

    4. 在最终获得一个这样的脚本后,就可以准备开始C++的编程了,这里,贴出我完成的脚本(为了不公开项目里的数据,这里我稍做改动,把数据相关的内容全部替换了)

    Sub MyReporter()
        Documents.Add DocumentType:=wdNewBlankDocument ' //生成一个空文档
        
        Selection.TypeText Text:="某某报表" ' //输入第1行内容
        Selection.TypeParagraph ' //换行
        Selection.TypeText Text:="行1:" ' //输入第2行内容
        Selection.TypeParagraph ' //换行
        Selection.TypeText Text:="行2:" ' //输入第3行内容
        Selection.TypeParagraph ' //换行
        Selection.TypeText Text:="行3:" ' //输入第4行内容
        Selection.TypeParagraph ' //换行
        Selection.TypeText Text:="行4:" ' //输入第5行内容
        Selection.TypeParagraph ' //换行
        Selection.TypeText Text:="行5" ' //输入第6行内容
        Selection.TypeParagraph ' //换行
        
        ' //添加一个6行4列的表格,使用默认样式 
        ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=6, NumColumns:= _
            4, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
            wdAutoFitFixed
        
        ' //添加表的内容并设置表的格式
        ' //输入表内第1行内容
     
        Selection.TypeText Text:="列1" ' //输入第1列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=1 ' //向右移动鼠标到下一列
        Selection.TypeText Text:="列2" ' //输入第2列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=1 ' //向右移动鼠标到下一列
        Selection.TypeText Text:="列3" ' //输入第3列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=1 ' //向右移动鼠标到下一列 
        Selection.TypeText Text:="列4" ' //输入第4列内容
        ' //输入表内第2行内容 
        Selection.MoveDown Unit:=wdLine, Count:=1 ' //向下移动鼠标到下一行 
        Selection.MoveLeft Unit:=wdCharacter, Count:=3 ' //向左移动鼠标到第1列
        Selection.TypeText Text:="列1" ' //输入第1列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=3 '// 向右移动鼠标到第4列
        Selection.TypeText Text:="列4" ' //输入第4列内容
        ' //输入表内第3行内容 
        Selection.MoveDown Unit:=wdLine, Count:=1 ' //向下移动鼠标到下一行
        Selection.MoveLeft Unit:=wdCharacter, Count:=3 ' //向左移动鼠标到第1列
        Selection.TypeText Text:="列1" ' //输入第1列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=1 ' // 向右移动鼠标到第2列
        Selection.TypeText Text:="列2" '//输入第2列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=1 ' // 向右移动鼠标到第3列
        Selection.TypeText Text:="列3" '//输入第3列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=1  ' // 向右移动鼠标到第4列
        Selection.TypeText Text:="列4" '//输入第4列内容
        ' //输入表内第4行内容 
        Selection.MoveDown Unit:=wdLine, Count:=1 ' //向下移动鼠标到下一行
        Selection.MoveLeft Unit:=wdCharacter, Count:=3 ' //向左移动鼠标到第1列
        Selection.TypeText Text:="列1" ' //输入第1列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=3 ' //向右移动鼠标到第4列
        Selection.TypeText Text:="列4" ' //输入第4列内容
        ' //输入表内第5行内容 
        Selection.MoveDown Unit:=wdLine, Count:=1 ' //向下移动鼠标到下一行
        Selection.MoveLeft Unit:=wdCharacter, Count:=3 ' //向左移动鼠标到第1列
        Selection.TypeText Text:="列1" ' //输入第1列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=3 ' //向右移动鼠标到第4列
        Selection.TypeText Text:="列4" ' //输入第4列内容
        ' //输入表内第6行内容 
        Selection.MoveDown Unit:=wdLine, Count:=1 ' //向下移动鼠标到下一行
        Selection.MoveLeft Unit:=wdCharacter, Count:=3 ' //向左移动鼠标到第1列
        Selection.TypeText Text:="列1" ' //输入第1列内容
        Selection.MoveRight Unit:=wdCharacter, Count:=3 ' //向右移动鼠标到第4列
        Selection.TypeText Text:="列4" ' //输入第4列内容
        ' //设置表的格式 
        Selection.MoveUp Unit:=wdLine, Count:=5 ' //向上移动鼠标到表的第1行(目前鼠标在第1行第4列最后一个字符后)
        Selection.MoveLeft Unit:=wdCharacter, Count:=15 ' //向左移动鼠标到第1列的第1个字符前
        Selection.MoveDown Unit:=wdLine, Count:=5, Extend:=wdExtend ' //向下选取5行,共选取6行(执行这句后,第1列全部选中)
        Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend ' //向右选取3列,共选取4列(执行这句后,整个表被选中)
        Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter ' //设置对齐方式为“居中”
        
        ' //开始设置表以前内容的格式 
        Selection.MoveUp Unit:=wdLine, Count:=1 ' //向上移动鼠标到上一行
        Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter '//设置此行为“居中”格式 
        Selection.MoveUp Unit:=wdLine, Count:=5 '// 向上移动鼠标到第1行
        Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter '//设置标题行为“居中”格式
        Selection.EndKey Unit:=wdLine ' //将鼠标定位到第1行末
        Selection.HomeKey Unit:=wdLine, Extend:=wdExtend ' //将鼠标定位到第1行首,同时选取整行
        Selection.Font.Bold = wdToggle ' //设置标题行为“粗体”    
        Selection.Font.Size = 15 ' //设置标题行字号为15(小三号) 
        Selection.MoveDown Unit:=wdLine, Count:=1 ' //向下移动鼠标到正文第1行
        Selection.HomeKey Unit:=wdLine ' //将鼠标定位到正文第1行首,(第2行行首) 
        Selection.MoveDown Unit:=wdLine, Count:=11, Extend:=wdExtend ' //向下选取除标题行外的全部内容
        Selection.Font.Size = 12 ' //设置字号为12(小四号)
        Selection.WholeStory '// 选取全部内容
        Selection.Font.Name = "宋体" '// 设置全部内容为“宋体”
        
        ' //保存文件为《某某报表.doc》到默认位置,WORD的默认路径是“我的文档”
        ActiveDocument.SaveAs FileName:="某某报表.doc", FileFormat:= _
            wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
            True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
            False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
            SaveAsAOCELetter:=False
            
        ' 退出程序,关闭Word
        Application.Quit
    End Sub

     

    5. 这就是最后一步了,就是把上面的VBA编程C++可执行的代码。当然,在生成这个工程的时候,一定要添加外部的库,这里,在MFC中操作WORD2003的库使用的是 MSWORD.OLB ,一般情况下,可以在OFFICE所在的文件夹下,通过搜索获得。对于如何添加这个外部链接库,这里不做记录了,会MFC的人,这个是基本功。那么在生成MFC工程后,把上面的VBA代码,一条一条翻译成C++的代码就行了,以下是翻译的结果:

    (把以下代码放到一个事件中,比如对一个Button的单击响应事件中,就可以运行了)

     //****待用的操作WORD的 常量
     const int wdCharacter = 1;
     const int wdLine = 5;
     const int wdAlignParagraphCenter = 1;
     const int wdExtend = 1;
     const int wdToggle = 9999998;
     const int wdFormatDocument = 0;
     const int wdWord9TableBehavior = 1;
      const int wdAutoFitFixed = 0;
     const int wdNULL = 0;
     const int wdNewBlankDocument = 0;
     const int wdWindowStateMinimize = 2;

     //****待用的操作WORD的 变量 
     _Application wordApp;
        Documents wordDocs;
        _Document wordDoc;
        Selection wordSelection;
     Range wordRange;
     Tables wordTables;
     Table wordTable;
     Cell wordCell;
     Cells wordCells;
     _Font wordFont;
     Shading wordShading;
     Paragraphs wordParagraphs;

     //****创建word application实例,失败的话返回false
     if (!wordApp.CreateDispatch(_T("Word.Application"))) 
     {
      AfxMessageBox("Word CreateDispatch Failed!");  //显示错误信息
      return FALSE; //返回false
     }     
     
     wordDocs=wordApp.GetDocuments();//获得 documents 实例 

     //****添加新的空白文档(调用COM)
     //(参考自:
    http://www.cnblogs.com/scq2099yt/archive/2008/01/07/1028717.html
     CComVariant tpl(_T("")),Visble,DocType(0),NewTemplate(false);
     wordDoc=wordDocs.Add(&tpl,&NewTemplate,&DocType,&Visble);
     wordSelection=wordApp.GetSelection(); //获得 wordSelection 实例

     //****添加文字 
     wordSelection.TypeText("某某报表"); //输出1行
     wordSelection.TypeParagraph(); //换行
     wordSelection.TypeText("行1:"); //输出2行
     wordSelection.TypeParagraph(); //换行
     wordSelection.TypeText("行2:");  //输出3行
     wordSelection.TypeParagraph(); //换行
     wordSelection.TypeText("行3:"); //输出4行 
     wordSelection.TypeParagraph(); //换行
     wordSelection.TypeText("行4:"); //输出5行
     wordSelection.TypeParagraph(); //换行
     wordSelection.TypeText("行5"); //输出6行
     wordSelection.TypeParagraph(); //换行
     
     //****插入表格 
     wordTables=wordDoc.GetTables(); //获得表格
     wordRange = wordSelection.GetRange();
     //添加一个6行4列的表格,使用默认样式
     wordTables.Add(wordRange, 
      6, // 行数
      4, // 列数
      COleVariant((short)wdWord9TableBehavior),
      COleVariant((short)wdAutoFitFixed)); 
     /*** 注意 COleVariant((short)XXX) 这个方法可以把int型转换为 VARIANT* 类型 ***/
     
     //添加表的内容并设置表的格式
     //输入表内第1行内容 
     wordSelection.TypeText("列1"); //输入第1列内容
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)1), 
      COleVariant((short)wdNULL)); //向右移动鼠标到下一列
     wordSelection.TypeText("列2"); //输入第2列内容
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)1), 
      COleVariant((short)wdNULL)); //向右移动鼠标到下一列
     wordSelection.TypeText("列3"); //输入第3列内容
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向右移动鼠标到下一列
     wordSelection.TypeText("列4"); //输入第4列内容 
     //输入表内第2行内容 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向下移动鼠标到下一行
     wordSelection.MoveLeft(COleVariant((short)wdCharacter), 
      COleVariant((short)3),
      COleVariant((short)wdNULL)); //向左移动鼠标到第1列
        wordSelection.TypeText("列1"); //输入第1列内容    
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)3), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第4列
     wordSelection.TypeText("列4"); //输入第4列内容
     //输入表内第3行内容 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向下移动鼠标到下一行
     wordSelection.MoveLeft(COleVariant((short)wdCharacter), 
      COleVariant((short)3),
      COleVariant((short)wdNULL)); //向左移动鼠标到第1列 
        wordSelection.TypeText("列1"); //输入第1列内容    
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)1), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第2列
     wordSelection.TypeText("列2"); //输入第2列内容
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)1), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第3列
     wordSelection.TypeText("列3"); //输入第3列内容
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)1), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第4列
     wordSelection.TypeText("列4"); //输入第4列内容
     //输入表内第4行内容 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向下移动鼠标到下一行
     wordSelection.MoveLeft(COleVariant((short)wdCharacter), 
      COleVariant((short)3),
      COleVariant((short)wdNULL)); //向左移动鼠标到第1列
        wordSelection.TypeText("列1"); //输入第1列内容    
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)3), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第4列    
     wordSelection.TypeText("列4"); //输入第4列内容
     //输入表内第5行内容 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向下移动鼠标到下一行
     wordSelection.MoveLeft(COleVariant((short)wdCharacter), 
      COleVariant((short)3),
      COleVariant((short)wdNULL)); //向左移动鼠标到第1列
        wordSelection.TypeText("列1"); //输入第1列内容    
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)3), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第4列    
     wordSelection.TypeText("列4"); //输入第4列内容
     //输入表内第6行内容 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向下移动鼠标到下一行
     wordSelection.MoveLeft(COleVariant((short)wdCharacter), 
      COleVariant((short)3),
      COleVariant((short)wdNULL)); //向左移动鼠标到第1列
        wordSelection.TypeText("列1"); //输入第1列内容    
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)3), 
      COleVariant((short)wdNULL)); //向右移动鼠标到第4列
     wordSelection.TypeText("列4"); //输入第4列内容
     //设置表的格式
     wordSelection.MoveUp(COleVariant((short)wdLine), 
      COleVariant((short)5),
      COleVariant((short)wdNULL)); //向上移动鼠标到表的第1行(目前鼠标在第一行第4列最后一个字符后)
     wordSelection.MoveLeft(COleVariant((short)wdCharacter), 
      COleVariant((short)15),
      COleVariant((short)wdNULL)); //向左移动鼠标到第1列的第1个字符前 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)5),
      COleVariant((short)wdExtend)); //向下选取5行,共选取6行(执行这句后,第1列全部选中)
     wordSelection.MoveRight(COleVariant((short)wdCharacter), 
      COleVariant((short)3), 
      COleVariant((short)wdExtend)); //向右选取3列,共选取4列(执行这句后,整个表被选中)
     wordParagraphs = wordSelection.GetParagraphFormat(); //获得对齐方式实例
     wordParagraphs.SetAlignment(wdAlignParagraphCenter); //设置表中的全部内容为“居中”
        
     //开始设置表以前内容的格式 
     wordSelection.MoveUp(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向上移动鼠标到上一行
        wordParagraphs = wordSelection.GetParagraphFormat(); //获得对齐方式实例 
     wordParagraphs.SetAlignment(wdAlignParagraphCenter); //设置此行为“居中”格式 
        wordSelection.MoveUp(COleVariant((short)wdLine), 
      COleVariant((short)5),
      COleVariant((short)wdNULL)); // 向上移动鼠标到第1行
     wordParagraphs = wordSelection.GetParagraphFormat(); //获得对齐方式实例
     wordParagraphs.SetAlignment(wdAlignParagraphCenter); //设置标题行为“居中”
     wordSelection.EndKey(COleVariant((short)wdLine),
      COleVariant((short)wdNULL)); //将鼠标定位到第1行末
     wordSelection.HomeKey(COleVariant((short)wdLine),
      COleVariant((short)wdExtend)); //将鼠标定位到第1行末
     wordFont = wordSelection.GetFont(); //获得字体实例
     wordFont.SetBold(wdToggle); //设置标题行为“粗体”     
     wordFont.SetSize(15.0); //设置标题行字号为15(小三号)
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)1),
      COleVariant((short)wdNULL)); //向下移动鼠标到正文第1行
     wordSelection.HomeKey(COleVariant((short)wdLine),
      COleVariant((short)wdNULL)); //将鼠标定位到正文第1行首,(第2行行首) 
     wordSelection.MoveDown(COleVariant((short)wdLine), 
      COleVariant((short)11),
      COleVariant((short)wdExtend)); //向下选取除标题行外的全部内容
     wordFont = wordSelection.GetFont(); //获得字体实例 
     wordFont.SetSize(12.0); //设置标题行字号为12(小四号)
     wordSelection.WholeStory(); // 选取全部内容
     wordFont = wordSelection.GetFont(); //获得字体实例
     wordFont.SetName("宋体"); //设置全部内容为“宋体”


     //保存文件为《某某报表.doc》到默认位置,和此程序在一起 
     CString fileName = "//某某报表.doc";
     CString fullFileName = GGetAppPath() + fileName;
     wordDoc.SaveAs(COleVariant(fullFileName), //FileName
      COleVariant((short)wdFormatDocument), //FileFormat
      COleVariant((short)FALSE), //LockComments
      COleVariant(""), //Password
      COleVariant((short)FALSE), //AddToRecentFiles
      COleVariant(""), //WritePassword
      COleVariant((short)FALSE), //ReadOnlyRecommended 
      COleVariant((short)FALSE), //EmbedTrueTypeFonts 
      COleVariant((short)FALSE), //SaveNativePictureFormat 
      COleVariant((short)FALSE), //SaveFormsData 
      COleVariant((short)FALSE), //SaveAsAOCELetter
      COleVariant((short)wdNULL), //Encoding 
      COleVariant((short)FALSE), //InsertLineBreaks
      COleVariant((short)FALSE), //AllowSubstutitions,
      COleVariant((short)wdNULL), //LineEnding
      COleVariant((short)wdNULL) //AddBiDiMarks
      );
     
     //退出程序,关闭Word
     wordApp.Quit(COleVariant((short)wdNULL),
      COleVariant((short)wdNULL),
      COleVariant((short)wdNULL));

     return TRUE; // 生成成功,返回TRUE

     

    6. 最后,编译,调试,运行,哈哈,最后,我生成了一个这样的表



    =========================================================

    使用word进行数据报告的制作可谓非常方便,word具有非常强大的编辑、排版功能。使用word能够制作出内容丰富、样式精美的报告。我们在工作中当然会有报表报告的需求,如果能够在MFC/VC++里面能够调用word进行word格式报告的自动生成,岂不是一件非常惬意的事情。

                              
                      我在工作当中需要对大量的数据或者各种测试数据进行统计分析,最终的统计分析结果总归要汇总为一份报告,不管是内部使用也好还是外部提供给客户也好,一份内容翔实、格式精美的报告自然必不可少。我对MFC/VC++也不是高手,只是业余爱好自己动动手做些东西。自然,低于VC操作word可谓完全没有经验,在网络上面也查找了很多资料,都是些只言片语,不能真正的领略通过VC使用word的方法。于是自己摸索了几个礼拜,可谓耗时甚长,劳心劳力啊。MS的东西,封装的也太严实了,对于函数部分只有些许的简单介绍,往往看的云里雾里。没有实践还是不行啊!体会自己的经历,虽然辛苦但也有收获。不想其他朋友再继续走我走过的路,浪费时间、精力,故成文以共享。
                              废话少说,进入正题吧。
                              第一步,当然我们需要首先导入word需要的库。通过ClassWizard->Add Class选择From 
                      a Type Library…定位需要的库文件导入。本例应该使用C:"Program Files"Microsoft 
                      Office"OFFICE11"MSWORD.OLB,在这里尽可选择所有的类导入,反正用的时候都有了,呵呵。完成这一步,我们得到两个文件msword.h和msword.cpp,那就加入你的工程吧。
                              
                      说明:如果需要在VC++/MFC开发程序操作word/excel等office元素,那么需要对必要的类型库进行导入.下面是office系列的类型库参考,导入类型库时候请选择正确的类型库进行导入.
                            

                      第二步,进入具体使用实践阶段。激动人心的时刻到来了,呵呵。不过别忘记把你的H文件#Include进来。下面是我的一个例子,从我具体的工程当中抽取出来供各位参考。有些地方我会简要解释。还等什么,赶紧试验一下代码吧。修改一下就是你的报告了,开心吧。
                              BOOLCMDIDemoApp::OnMakeReport()
                               {
                                       _ApplicationwordApp;

                                      DocumentswordDocs;

                                      _DocumentwordDoc;

                                      SelectionwordSelection;

                                      RangewordRange;

                                      TableswordTables;

                                      TablewordTable;     

                                      CellwordCell;   

                                      CellswordCells;

                                      //Paragraphs wordParagraphs;

                                      //Paragraph wordParagraph;

                                      _FontwordFont;

                                      ShadingwordShading;

                                      intnRow=0;

                                      COleVariantvTrue((short)TRUE), 
                                      vFalse((short)FALSE), 
                                      vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
                                      
                      CComVariantdefaultBehavior(1),AutoFitBehavior(0);
                                      //创建word application实例
                                      if 
                      (!wordApp.CreateDispatch(_T("Word.Application"))) 
                                      {
                                              AfxMessageBox("Word CreateDispatch 
                      Failed!");
                                              returnFALSE;
                                      }     
                                      wordApp.SetVisible(TRUE);//make visible
                                      wordApp.Activate();//激活
                                      wordDocs=wordApp.GetDocuments();//get 
                      documents object
                                      CStringstrDocTemplate;
                                      CStringstrPath;
                                      charszFullPath[_MAX_PATH];
                                      
    ::GetModuleFileName(NULL,szFullPath,_MAX_PATH);
                                      strDocTemplate.Format("%s",szFullPath);
                                      intnPos=strDocTemplate.ReverseFind('""');
                                      strDocTemplate=strDocTemplate.Left(nPos);
                                      strPath=strDocTemplate;
                                      TRACE1("%s"n",strDocTemplate);
                                      //     
                      strDocTemplate+="""Template""Report.doc";
                                      //     
                      wordDoc=wordDocs.Open(COleVariant(strDocTemplate),&vOpt,&vOpt,&vOpt,&vOpt,
                                      //            
                      &vOpt,&vOpt,&vOpt,&vOpt,&vOpt,&vOpt,&vTrue,&vOpt,&vOpt,&vOpt,&vOpt);
                                      
                      CComVarianttpl(_T("")),Visble,DocType(0),NewTemplate(false);
                                      
                      wordDoc=wordDocs.Add(&tpl,&NewTemplate,&DocType,&Visble);
                                      wordSelection=wordApp.GetSelection();
                                      
                      //wordTables.AttachDispatch(wordDoc.GetTables());
                                      wordTables=wordDoc.GetTables();
                                      //wordParagraphs = wordDoc.GetParagraphs();
                                      //wordParagraph=wordParagraphs.GetLast();
                                      //wordRange=wordParagraph.GetRange();
                                      
                      //wordSelection.EndKey(COleVariant((short)6),COleVariant((short)0));
                                      //move insertion point to the end of the story
                                      /*
                                      wdUnits:
                                      wdCharacter=1   
                                      wdWord=2
                                      wdSentence=3
                                      wdParagraph=4
                                      wdSection=8
                                      wdStory=6
                                      wdCell=12
                                      wdColumn=9
                                      wdRow=10
                                      wdTable=15       
                                      wdMovementType:
                             
                                      wdMove=0
                                      wdExtend=1       
                                      */
                                      //move to end of story
                                      
                      wordSelection.EndOf(COleVariant((short)6),COleVariant((short)0));
                                      //1.1 RxLev Full 
                                      wordSelection.TypeText("1. 统计报告");
                                      
                      wordSelection.HomeKey(&CComVariant(5),&CComVariant(1));
                                      //Format the line with selection
                                      wordFont = wordSelection.GetFont();
                                      wordFont.SetBold(9999998);//wdToggle
                                      
                      wordSelection.EndOf(&CComVariant(5),&CComVariant(0));
                                      wordSelection.TypeParagraph();    
                                      wordSelection.TypeText("(1.1). 分段统计");
                                      wordSelection.TypeParagraph();
                                      wordFont.SetBold(9999998);//wdToggle
                                      wordRange=wordSelection.GetRange();
                                       //add table
                                      //nRow=m_nRange1+1;
         wordTable=wordTables.Add(wordRange,5/*row*/,4/*column*/,&defaultBehavior,&AutoFitBehavior);
                                      wordRange=wordTable.GetRange();
                                      
                      //wordRange.MoveEnd(COleVariant((short)15),COleVariant((short)1));
                                      //wordRange.Select();
                                      //move end of table
                                      
                      //wordSelection.EndOf(COleVariant((short)15),COleVariant((short)0));
                                      //insert rows
                                      
                      //wordSelection.InsertRowsBelow(COleVariant((short)5));
                                      //选择第一个单元,进而选择第一行进行格式化
                                      wordCell=wordTable.Cell(1,1);
                                      wordCell.Select();
                                      //select the row with current selection
                                      
                      wordSelection.EndKey(&CComVariant(10),&CComVariant(1));
                                      //Format the row with selection
                                      //wordFont = wordSelection.GetFont();
                                      wordFont.SetBold(9999998);//wdToggle
                                      wordCells=wordSelection.GetCells();
                                      wordShading = wordCells.GetShading();
                                      wordShading.SetTexture(0);
                                      
                      wordShading.SetBackgroundPatternColor(14737632);//15987699 
                      14737632 adColorBlue
                                      
                      wordShading.SetForegroundPatternColor(-16777216);//-16777216 
                      wdColorAutomatic
                                      //move to end of table
                                      
                      //wordSelection.EndOf(COleVariant((short)15),COleVariant((short)0));
                                      //wordParagraph=wordParagraphs.GetLast();
                                      //wordRange=wordParagraph.GetRange();
                                      
                      //wordRange.MoveEnd(COleVariant((short)4),COleVariant((short)1)); 
                           
                                      //wordRange.SetText("Test");
                                      //wordSelection=wordApp.GetSelection();
                                      
                      //wordSelection.MoveEnd(COleVariant((short)6),COleVariant((short)1));
                                      wordCell=wordTable.Cell(1,1);
                                      wordCell.Select();
                                      wordSelection.TypeText("统计项目");
                                      
                      wordSelection.MoveRight(&CComVariant(12),&CComVariant(1),&CComVariant(0));
                                      wordSelection.TypeText("采样");
                                      
                      wordSelection.MoveRight(&CComVariant(12),&CComVariant(1),&CComVariant(0));
                                      wordSelection.TypeText("百分比");
                                      
                      wordSelection.MoveRight(&CComVariant(12),&CComVariant(1),&CComVariant(0));
                                      wordSelection.TypeText("累计百分比");
                                      
                      wordSelection.EndOf(COleVariant((short)6),COleVariant((short)0));
                                      wordSelection.TypeParagraph();    
                                      wordSelection.TypeText("(1.2). 分段统计");
                                      
                      wordSelection.HomeKey(&CComVariant(5),&CComVariant(1));
                                      /Format the line with selection
                                      wordFont = wordSelection.GetFont();
                                      wordFont.SetBold(9999998);//wdToggle
                                      
                      wordSelection.EndOf(&CComVariant(5),&CComVariant(0));
                                      wordSelection.TypeParagraph();
                                      wordFont.SetBold(9999998);//wdToggle
                                      wordRange=wordSelection.GetRange();
                                      //add table
                                      //nRow=m_nRange1+1;
                                      
                      wordTable=wordTables.Add(wordRange,5/*row*/,4/*column*/,&defaultBehavior,&AutoFitBehavior);
                                      wordRange=wordTable.GetRange();
                                      //选择第一个单元,进而选择第一行进行格式化
                                      wordCell=wordTable.Cell(1,1);
                                      wordCell.Select();
                                      //select the row with current selection
                                      
                      wordSelection.EndKey(&CComVariant(10),&CComVariant(1));
                                      //Format the row with selection
                                      wordFont = wordSelection.GetFont();
                                      wordFont.SetBold(9999998);
                                      wordCells=wordSelection.GetCells();
                                      wordShading = wordCells.GetShading();
                                      wordShading.SetTexture(0);
                                      
                      wordShading.SetBackgroundPatternColor(14737632);//15987699
                                      
                      wordShading.SetForegroundPatternColor(-16777216);
                                      wordCell=wordTable.Cell(1,1);
                                      wordCell.Select();
                                      wordSelection.TypeText("Range");
                                      
                      wordSelection.MoveRight(&CComVariant(12),&CComVariant(1),&CComVariant(0));
                                      wordSelection.TypeText("Samples");
                                      
                      wordSelection.MoveRight(&CComVariant(12),&CComVariant(1),&CComVariant(0));
                                      wordSelection.TypeText("Percentage");
                                      
                      wordSelection.MoveRight(&CComVariant(12),&CComVariant(1),&CComVariant(0));
                                      wordSelection.TypeText("Calculation");
                                      //Save document as report
                                      SYSTEMTIMEsysTime;
                                      GetLocalTime(&sysTime);
                                      CStringstrReport;
                                      strReport.Format("%d年-%d月-%d日 %d-%d-%d 
                      报告",sysTime.wYear,sysTime.wMonth,
                                      
                      sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);
                                      strReport=strPath+""""+strReport;
                                      
                      wordDoc.SaveAs(COleVariant(strReport),COleVariant((short)0),vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
                                      //Release com
                                      wordFont.ReleaseDispatch();
                                      wordCells.ReleaseDispatch();
                                      wordShading.ReleaseDispatch();
                                      wordTable.ReleaseDispatch();
                                      wordTables.ReleaseDispatch();
                                      wordRange.ReleaseDispatch();
                                      wordSelection.ReleaseDispatch();
                                      wordDoc.RecheckSmartTags();
                                      wordDocs.ReleaseDispatch();
                                      wordApp.ReleaseDispatch();
                                      returnTRUE;
                              }
                              注释如下:
                              
                      1.使用之前比忘记先进行COM环境的初始化,最好放在BOOLCMDIDemoApp::InitInstance()里吧。
                              //Initialize COM context
                              if (FAILED(::CoInitialize(NULL)))
                              {
                                     AfxMessageBox("Initialize COM context 
    failed!");
                                      returnFALSE;
                              }
                              2.注意几个函数的用法:
                              a) 
                      wordSelection.EndOf(COleVariant((short)6),COleVariant((short)0));
                              b) 
                      wordSelection.EndKey(&CComVariant(10),&CComVariant(1));
                              c) 
                      wordSelection.HomeKey(&CComVariant(5),&CComVariant(1));
                              d) 
                      wordTable=wordTables.Add(wordRange,5/*row*/,4/*column*/,&defaultBehavior,&AutoFitBehavior);
                              
                      这几个函数可以说是我收获最大的地方了,EndOf/EndKey/HomeKey实现了当前焦点的任意移动,比如到一个文档的末尾或者行尾、表格的操作位置等。举例来说:EndOf 
                      (VARIANT* Unit, VARIANT* Extend) 
                      其第二个参数Extend决定了你是单纯的移动光标还是扩展移动选中内容。通过VBA参考,你可以知道wdMove=0 
                      wdExtend=1,这样就可以决定是移动还是扩展选择内容了。
                              
                      当然还有其他很多操作可以摸索,大可以先用word的宏录制,然后编写自己的VC代码,不过确实是个繁琐的过程,很多VBA常量需要查找具体的value替换。
                              
                      通过预先的模版,你可以实现打开一个word模版,然后添加你自己的内容,灵活应用。然后保存为自己的报告。请参阅我的例子自己实现吧。Enjoy 
                      it by yourself...... J
                              
                      由于时间关系,我还没有摸索通如何在word报告中插入图表(chart/bar/pie)以及如何插入图片jpg等,这样就可以做出图文并茂的报告了。如果你有经验,欢迎交流共享。


    每隔一二年就要用一次 WORD 或其它 MSOffice 组件,好多次了,每次都忘的一干二净,从头google,这次又要用,顺便记下来,以备不时之需,同时分享给大家。开发环境 WIN7-X64, VC2010, MSOffice2010。

    1. 在VC2010项目名称上右击,选择类向导...


    2.在右上角的添加类中选择“类库中的MFC类”

    3. 在新对话框中选择文件,点击右边的“...”按钮,按图示选择MSWORD.OLD文件。

    4. 按需要选择一些常用的类,完成

    5. 把新生成的 .h 文件顶部的 #import "E:\\TTMv8\\Debug\\MSWORD.OLB" no_namespace 这一行注释掉,否则编译时会出现一大堆错误,网上有别的解决办法,我觉得注掉这个办法最好。出现的错误代码如下:

    //#import "E:\\TTMv8\\Debug\\MSWORD.OLB" no_namespace
    /* 编译时出一大堆错,把上面这一句注消就好了!!!!!!!,可能还能保证各word版本的兼容性
    1>e:\ttmv8\ttmv8\capplication.h(3): warning C4278: “ExitWindows”: 类型库“E:\\TTMv8\\Debug\\MSWORD.OLB”中的标识符已经是宏;使用“rename”限定符
    1>e:\ttmv8\ttmv8\capplication.h(3): error C2872: “Font”: 不明确的符号
    1>          可能是“c:\program files (x86)\microsoft visual studio 10.0\vc\include\comdef.h(312) : Font”
    1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(244) : Gdiplus::Font”
    1>e:\ttmv8\ttmv8\capplication.h(3): error C2872: “Font”: 不明确的符号
    1>          可能是“c:\program files (x86)\microsoft visual studio 10.0\vc\include\comdef.h(312) : Font”
    1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(244) : Gdiplus::Font”
    */

    6. 添加代码,以下是实际使用的代码,功能是用指定的 word 模板新建一个文档,在预设的书签位置插入文字和图片。

    // 将当前所有打开的图像窗口导出到word中, 最多输出6个

    1. void ViewImagesFrame::OnReportimg()  
    2. {  
    3.     CDocument0 cdoc;    // Word 文档类  
    4.       
    5.     if( m_bViewmax )    // 最大化时导出一幅活动图像  
    6.     {  
    7.         // word 图表报告模板文件  
    8.         CString str;  
    9.         str.Format( L"%s\\imgreport1.dotx", theApp.appPath); // 取对应模板   
    10.         if( ! wordopen(  str, cdoc ) )  
    11.             return;  
    12.   
    13.         // 插入文字信息  
    14.         insertinfo( cdoc );  
    15.   
    16.         // 插入图像信息  
    17.         str.Format(L"%s/reportimg0.png", theApp.appPath);  
    18.         m_pView->OnExportimg( str );  
    19.         insertimg(str, cdoc, L"v8img_image0");  
    20.     }  
    21.     else    //否则  
    22.     {  
    23.         int n = m_arViews.GetSize();  
    24.         if( !n )  
    25.             return;  
    26.   
    27.         if( n > 6 )  
    28.             n = 6;  //最多输出6个  
    29.   
    30.         // word 图表报告模板文件  
    31.         CString str;  
    32.         str.Format( L"%s\\imgreport%i.dotx", theApp.appPath, n); // 取对应模板   
    33.         if( ! wordopen(  str, cdoc ) )  
    34.             return;  
    35.   
    36.         // 插入文字信息  
    37.         insertinfo( cdoc );  
    38.   
    39.         // 插入图像信息  
    40.         forint i = 0; i < n; i++ )  
    41.         {  
    42.             str.Format(L"%s/reportimg%i.png", theApp.appPath, i);  
    43.             m_arViews[i]->OnExportimg( str );  
    44.             CString str2;  
    45.             str2.Format(L"v8img_image%i", i);  
    46.             insertimg(str, cdoc, str2);  
    47.         }  
    48.     }  
    49. }  
    50.   
    51. // 将当前所有打开的图像窗口导出到word中, 最多输出6个, LPCTSTR dotxname 指定的模板, CDocument0 &cdoc out 返回新建的文档。  
    52. bool ViewImagesFrame::wordopen( LPCTSTR dotxname, CDocument0 &cdoc )  
    53. {  
    54.     COleVariant  
    55.         covTrue((short)TRUE),  
    56.         covFalse((short)FALSE),  
    57.         covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),  
    58.         //covFileName(_T("E:\\temp\\ac\\Debug\\imgreport.dotx"));  
    59.         covFileName(dotxname);  
    60.   
    61.     CApplication capp;  
    62.     CDocuments cdocs;  
    63.     if(FALSE == capp.CreateDispatch(_T("word.application"), NULL)){  
    64.         return false;  
    65.     }  
    66.   
    67.     capp.put_Visible(TRUE);  
    68.   
    69.     CString version = capp.get_Version();  
    70.     CString name = capp.get_Name();  
    71.     CString cap1 = capp.get_Caption();  
    72.   
    73.     LPDISPATCH disp = capp.get_Documents();  
    74.   
    75.     if(NULL == disp){  
    76.         return false;  
    77.     }  
    78.   
    79.     cdocs.AttachDispatch(disp);  
    80.   
    81.     if(NULL == cdocs.m_lpDispatch){  
    82.         return false;  
    83.     }  
    84.   
    85.     cdoc.AttachDispatch(cdocs.Add(  
    86.         covFileName,  
    87.         covFalse,  
    88.         covFalse,  
    89.         covTrue  
    90.         ));  
    91.   
    92.     if(NULL == cdoc.m_lpDispatch){  
    93.         return false;  
    94.     }  
    95.   
    96.     return true;  
    97. }  
    98.   
    99. // 向word中加入文件信息  
    100. void ViewImagesFrame::insertinfo( CDocument0 &cdoc )  
    101. {  
    102.     myimg * pim =  m_arViews[0]->pimg;   // 取第一个图像的信息  
    103.   
    104.     insertstr(cdoc, L"v8img_name", pim->name );  
    105.   
    106.     CString str;  
    107.     str.Format(L"%i", pim->m_nAge);  
    108.     insertstr(cdoc, L"v8img_age", str );  
    109.   
    110.     insertstr(cdoc, L"v8img_sex", pim->m_strSex );  
    111.   
    112.     insertstr(cdoc, L"v8img_subject", pim->subject );    // 检查方法  
    113.   
    114.     str = pim->scanday.Format( _T("%Y-%m-%d") );  
    115.     insertstr(cdoc, L"v8img_scandate", str );   // 扫描日期  
    116.   
    117.     insertstr(cdoc, L"v8img_sick", pim->sickid );    // 扫描编号  
    118.   
    119.     Cdasys ds;  
    120.     insertstr(cdoc, L"v8img_company", ds.getvalue(L"CompanyName") );    // 单位  
    121.     insertstr(cdoc, L"v8img_address", ds.getvalue(L"CompanyAddress") ); // 单位  
    122.     insertstr(cdoc, L"v8img_telephone", ds.getvalue(L"CompanyTelephone") ); // 单位  
    123. }  
    124.   
    125. // 插入字符串,  CDocument0 &cdoc 文档, LPCTSTR strMark 书签名, LPCTSTR strValue,插入的值  
    126. void ViewImagesFrame::insertstr( CDocument0 &cdoc, LPCTSTR strMark, LPCTSTR strValue )  
    127. {  
    128.     CBookmarks bms = cdoc.get_Bookmarks();  
    129.   
    130.     COleVariant bm( strMark );  
    131.     CBookmark0 bk = bms.Item(bm);  
    132.     CRange rang = bk.get_Range();  
    133.     rang.InsertAfter(strValue);  
    134. }  
    135.   
    136. // 向word中加入图像, PCTSTR imgname 图像文件名, CDocument0 &cdoc 文档word, LPCTSTR mark 书签名  
    137. void ViewImagesFrame::insertimg( LPCTSTR imgname, CDocument0 &cdoc, LPCTSTR mark )  
    138. {  
    139.     CBookmarks bms = cdoc.get_Bookmarks();  
    140.   
    141.     COleVariant bm0( mark );  
    142.     CBookmark0 bk = bms.Item(bm0);  
    143.     CRange rang = bk.get_Range();  
    144.     CnlineShapes shape = cdoc.get_InlineShapes();  
    145.     shape.AddPicture(imgname, COleVariant((short)FALSE), COleVariant((short)TRUE), &_variant_t(rang));  
    146. }  

    bookmark书签操作
    void CZzView::OnLButtonDown(UINT nFlags, CPoint point)
    {
     
    // TODO: Add your message handler code here and/or call default
      _Application WordApp;//定义Word提供的应用程序对象;
     
      Documents docs;//定义Word提供的文档对象;
      _Document doc;
     
      Selection m_Sel;//定义Word提供的选择对象;
      Bookmarks bootmarks;
      Bookmark  bootmark;
      Range range;
      Table table;
      Tables tables;
       
     
      if(!WordApp.CreateDispatch("Word.Application",NULL))    
      {
          
        AfxMessageBox("创建MS-WORD服务失败!");    
        exit(1);    
       
    };  
     
      WordApp.SetVisible(true);  
      docs=WordApp.GetDocuments();    
      COleVariant   covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);  
      COleVariant   start_line,end_line;  
      COleVariant   Dot("c:\\test.dot");     
      doc=docs.Add(&Dot,&covOptional,&start_line,&end_line);//使用test.dot作为模板建立新文档
       
       
      //获得DOC文档的书签集  
      bootmarks=doc.GetBookmarks();  
      //第一到三列的的书签名分别是rol1、rol2、rol3  
      COleVariant   tem1("rol1");  
      bootmark=bootmarks.Item(&tem1);  
      range=bootmark.GetRange();  
      //设置列标题  
      range.SetText("列标题1");  
      COleVariant   tem2("rol2");  
      bootmark=bootmarks.Item(&tem2);  
      range=bootmark.GetRange();  
      range.SetText("列标题2");  
      COleVariant   tem3("rol3");  
      bootmark=bootmarks.Item(&tem3);  
      range=bootmark.GetRange();  
      range.SetText("列标题3");  
       
     
      CRichEditView::OnLButtonDown(nFlags, point);
     
    }

    展开全文
  • WordXML格式解析

    2017-12-10 12:08:11
    Office2003以上,Word可以以XML文本格式存储,这样就可以使用外部程序创建Word文件,而不需要使用Word的对象。也能够自由的打开分析Word文件,或者发布到自己的Web页面,或者其他更多应用。 一个典型的WordXML结构...

    前言

    Office2003以上,Word可以以XML文本格式存储,这样就可以使用外部程序创建Word文件,而不需要使用Word的对象。也能够自由的打开分析Word文件,或者发布到自己的Web页面,或者其他更多应用。

    一个典型的WordXML结构可以是如下的样子:

    <?xml version="1.0"?>
    <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
    <w:p>
    <w:r>
    <w:t>Hello, World.</w:t>
    </w:r>
    </w:p>
    </w:body>
    < /w:wordDocument>

    image

    可以用记事本创建一个文件,将上面的XML内容粘贴,并保存为helloworld.xml,在Office Word中打开它,就能看到如上图所示的内容。

    这是最简单的WordXML内容,它包括这几部分:

    XML的声明和名称空间的指明:
    <?xml version="1.0"?>
    <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">

    文档内容

    <w:body>…</w:body>

    基本节点类型

    从body内可以看出,构成实际文本内容的有3种类型节点:
    <w:p> 表示一个段落

    <w:r> 表示一个样式串,指明它包括的文本的显示样式

    <w:t> 表示真正的文本内容

    如果我们需要指明一个文本为粗体,需要怎么办呢?

    <w:r>
    <w:rPr> 
    <w:b w:val="on"/>
    </w:rPr> 
    <w:t> 2.0C</w:t>
    < /w:r>

    <w:b w:val=”on”> 表示该格式串种的文本为粗体。

    这样,我们就知道<w:r>表示一个特定的文本格式,稍微复杂点的格式:

    <w:r>
    < w:rPr> 
    < w:b w:val="on"/>
    < w:sz w:val="40"/><w:szCs w:val="40"/>
    < w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
    < /w:rPr> 
    < w:t xml:space="preserve">2.0C</w:t>
    < /w:r>

    字体为粗体,尺寸为是40除2等于20相当于几号字体?,字体名称“Arial”

    <w:t xml:space="preserve"> 2.0C</w:t>

    中的xml:space="preserve"从字面上理解是保持空格。

    如果没有这内容的话文本的前后空格将会被Word忽略。

    如果我们需要指定一个段的对齐方式,行距要怎么办呢?

    这就要设置<w:p>的属性了。类似于这样:

    <w:p>
    < w:pPr>
    < w:jc w:val="right"/>
    < w:spacing w:line="600" w:lineRule="auto"/>
    < /w:pPr>

    </w:p>

    对齐方向:<w:jc w:val=”right”/> 这儿是右对齐。

    行距:<w:spacing w:line=”600” w:lineRule="auto"/> 600是用行距的倍数乘240得出,如果是两倍行距,则是480。这儿应该是2.5倍行距。

    由此可见,组装一个WordXML格式的文件是一件比较简单的事情。

    将段属性包含在<w:pPr></w:pPr>中

    将文本格式包含在<w:rPr></w:rPr>中

    这儿的Pr是property的意思,表示这个块中是r(run)或p(paragraph)的格式设置。

    一个WordXML的文件结束了吗?可以这样讲,但如果你双击刚才创建的XML文件,有很大机会不会由Word来打开它。

    这是为什么呢?

    我们还需要在合适的地方放置一条语句:

    <?xml version="1.0"?>
    <?mso-application progid="Word.Document"?>
    <w:wordDocument 

    用来指明这个xml文件的对应处理程序,对应注册表中的键值:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Common\Filter\text/xml

    但是,加入这一条语句后,双击打开时,Word将会提示XML的格式不正确,虽然能打开。那是因为还有许多的内容没有声明。我们就先不加这条语句。

    页面设置

    下面内容设置了页的宽,高,和页的各边距。各项的值均是英寸乘1440得出:

    <w:body>…
    <w:sectPr>
    <w:pgSz w:w="12240" w:h="15840"/>
    <w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/>
    < /w:sectPr>

    </w:body>

    下面内容设置了页的页眉页脚:

    w:sectPr wsp:rsidR="002C452C">
    <w:hdr w:type="odd" >
    <w:p>
    <w:pPr>
    <w:pStyle w:val="Header"/>
    </w:pPr>
    <w:r>
    <w:t>My Header</w:t>
    </w:r>
    </w:p>
    </w:hdr>
    <w:ftr w:type="odd">
    <w:p>
    <w:pPr>
    <w:pStyle w:val="Footer"/>
    </w:pPr>
    <w:r>
    <w:t>My Footer</w:t>
    </w:r>
    </w:p>
    </w:ftr>

    </w:sectPr>
    < /w:body>

    这两段都很直白,就不需要解释了。

    文档设置

    </w:body>

    <w:docPr>
    <w:view w:val="print"/><w:zoom w:percent="100"/>
    < /w:docPr>

    </w:wordDocument>

    docPr,就是document property的意思了。

    表示文档的视图是“print”,视图比例100%

    完整的XML文件实例

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    < ?mso-application progid="Word.Document"?>
    < w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:v="urn:schemas-microsoft-com:vml"
    xmlns:w10="urn:schemas-microsoft-com:office:word"
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
    xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
    xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
    xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
    w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no"
    xml:space="preserve">

    <w:body>
    < w:p>
    < w:pPr>
    < w:jc w:val="left"/>
    < w:spacing w:line="240" w:lineRule="auto"/>
    < /w:pPr>
    < w:r>
    < w:rPr> 
    < w:sz w:val="24"/><w:szCs w:val="24"/>
    < w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
    < /w:rPr> 
    < w:t>Niu don't like Red or Blue! It seems that </w:t>
    < /w:r>
    < w:r>
    < w:rPr> 
    < w:sz w:val="48"/><w:szCs w:val="48"/>
    < w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
    < /w:rPr> 
    < w:t>Hello world!</w:t>
    < /w:r>
    < /w:p>
    < w:p>

    <w:sectPr wsp:rsidR="002C452C">
    < w:pgSz w:w="12240" w:h="15840"/>
    < w:pgMar w:top="1526.4" w:right="3254.4" w:bottom="2966.4" w:left="1670.4" w:header="720" w:footer="720" w:gutter="0"/>
    < w:hdr w:type="odd" >
    < w:p>
    < w:pPr>
    < w:pStyle w:val="Header"/>
    < /w:pPr>
    < w:r>
    < w:t>Header</w:t>
    < /w:r>
    < /w:p>
    < /w:hdr>
    < w:ftr w:type="odd">
    < w:p>
    < w:pPr>
    < w:pStyle w:val="Footer"/>
    < /w:pPr>
    < w:r>
    < w:t>Footer</w:t>
    < /w:r>
    < /w:p>
    < /w:ftr>
    < /w:sectPr>
    < /w:body>

    <w:docPr>
    < w:view w:val="print"/><w:zoom w:percent="100"/>
    < /w:docPr>
    < /w:wordDocument>

    这样,一个基本的WordXML就创建完成,当然,一个应用级别的Word文档绝对不仅这些内容,更详细的内容需要参考MS Office SDK。

    展开全文
  • Word学习笔记分享

    2019-02-22 13:57:10
    第一章、Word 的常规排版 1-5 文字选择 Ctrl+鼠标选取——多选 Alt+鼠标选取——框选 1-11 文字效果 为文字添加填充与边框 1-13 字体其他效果 为字体添加着重号、删除线、上下标等效果 Ctrl+D ——打开字体选项栏 1-...

    第一章、Word 的常规排版

    1-5 文字选择

    Ctrl+鼠标选取——多选
    Alt+鼠标选取——框选

    1-11 文字效果

    为文字添加填充与边框

    1-13 字体其他效果

    为字体添加着重号、删除线、上下标等效果
    Ctrl+D ——打开字体选项栏

    1-14 项目符号

    为成段的文字添加相同的符号标识
    可以分级操作,快捷键为 TABShift+TAB

    1-15 项目编号

    为成段的文字添加有序的符号标识
    可以分级操作,快捷键同上

    1-16 制表位

    提供快速对齐的方式,可在段落选项栏调出

    1-18 格式刷与 F4

    格式刷可以快速地复制文字、段落、图片的格式到目标对象
    单击格式刷标志可以使用格式刷一次,双击可以锁定格式刷工具,提供多次使用同一格式的途 径。
    格式刷的快捷键——Ctrl+Shift+C 选择格式 和 Ctrl+Shift+V 使用格式
    F4——重复上一次的操作,可以设置格式,也可以其他的操作,但是只能重复一个操作

    1-19 中文版式

    提供纵横混排功能,合并字符可以用于两个并列的机构联合发表文件不分前后,使用联合公文头。
    双行合一也可制作联合公文头。

    1-20 单词转换与拼音

    可以大写首字母,全部小写,全部大写,每个单词首字母大写,切换大小写(把大写变为小写,把小写变为大写),还有全半角的转换
    为文字添加拼音时需要选择居中,然后调大间距。

    1-21 Word 排序

    排序选项中可以选择域,域的区分来源于分隔符,排序方式同 excel

    1-22 样式

    样式就相当于一个永久保存的格式刷,并且可以进行修改。并且可以选择应用此格式的全部内容。

    1-23 带圈数字的插入

    直接使用带圈字符工具,并可更改圈的样式,但是有些字体圈不住。可以直接插入带圈的符号,这时修改字体之类的不会出现圈不住的情况,但是符号比较少。也可以用 Endylau.ttf 字体进行输入,但是需要一个对照表,就和 origin 里的希腊字母一样。

    1-24 页面设置

    可以调整页面的大小,调整页边距来调整页数,

    1-25 分栏与分隔符

    分栏工具可以对所选文字进行自定义分栏,但是会遇到混乱的情况,这时候在视图里调整为大纲视图或者草稿视图就可以看到分节符,分节符是分栏时自动产生的,删除分节符即可,因为分节符允许不同的节之间采用不同的页面设置。

    1-26 分栏与分隔符

    在分栏时会遇到左右两栏长度不同,可以在对应的位置插入分栏符进行自定义长度的分栏。
    分页符可以直接把光标之后的内容强制移动到下一页,快捷键 Ctrl+Enter
    强制换行可以选择自动换行分隔符,这样仍然是一段没有像回车一样新建一段。
    两端插入连续的分节符可以使中间部分的页面设置独立于另外的部分。
    插入分页分节符后会分节并把其后内容强制推移到下一页或者奇数偶数页。

    1-27 水印与背景

    水印可以自定义的设置,可以设置文字,也可以设置图片,设置图片时最好勾选冲蚀效果,不至于影响原文的识别。
    背景图片不可打印,但是可以把图片做成水印,或者直接插入图片衬于文字下方,就可以执行打印操作了。

    1-28 拼写、翻译、简繁、统计

    拼写和语法错误可以用审阅里面的拼写和语法功能进行统一调整,快捷键 F7
    也可以用审阅里的字数统计功能统计现在文档里的字符数目。
    选中文字可以进行翻译操作。
    选中文字可以进行简繁转换,同时里面的词语会替换成符合台湾地区的用语习惯的词语。

    1-29 主题与稿纸

    主题会影响主题颜色,字体等样式,自己的主题可以进行保存。
    稿纸设置可以设置稿纸的网格样式等相关效果。

    1-30 综合应用(普通排版)

    想让下划线远离文本一些可以在两端添加空格,然后把中间部分文字上浮。

    第二章、表格

    2-1 认识与新建表格

    可以自己绘制,也可以直接在插入表格中直接拖动生成表格,也可以自定义设置表格的列数行数,列宽的等数据,列宽可以分为固定列宽,根据内容调整,根据窗口调整。

    2-2 Word 表格的选择与操作

    当光标处于表格中时,可以选择整行整列,多选
    移动表格可以拖动表格左上角的移动标志
    调整表格大小的时候可以直接在右下角拖动调整

    2-3 表格的常规操作

    移动整行整列时只需要先选择该行该列然后拖动到需要移动到的位置的第一列或第一行,也可以用快捷键先选择该行然后按 Alt+Shift+上下方向键,只能如此调整行,不可以调整列。按住 Ctrl 拖动可以复制。
    选定内容按 Delete 只清除内容不清除格式,可以用清除格式功能清除格式,按 BACKSPACE 直接删除。

    2-4 表格常规操作

    插入时,选择两行则直接插入两行。
    可以把表格拆分,选择需要拆分的表格,然后直接在布局里选择拆分表格工具,也可以直接拖出去,就可以完成拆分。拆分列时只能直接拖动,拆分表格工具只能拆分行。

    2-5 行高列宽调整

    可以直接拖动
    也可以双击调整,但是只能调整列
    按住 Alt 键进行拖动可以进行精细的调整,也可以同时按下左右方向键
    也可以在选择整行整列之后在布局里调整行宽和列高,并可以平均分布行和列
    分离边框时,可以选择需要分别调整的单元格进行边框的拖动,然后就可以单独调整了。

    2-6 表格制作(借款单)

    在表格上方加文字可以在第一行第一列敲回车,在使文字上浮分离下划线时不能使用距离分布,不然会错位。
    想更加灵活的编辑表格可以直接用绘制表格工具进行绘制。

    2-7 表格底纹和边框1

    为表格添加底纹和边框

    2-8 表格底纹和边框2

    还可以进入边框和底纹界面进行细致的调节。

    2-9 表格样式

    使用表格样式分为应用并保留格式和应用并清除格式,保留格式会保留你特殊设置的格式。
    使用表格样式是可以套用标题行、汇总行、镶边行等格式,也可以不勾选。
    当然,表格样式可以自己新建保存修改。

    2-10 表格制作(申请表)

    实例已完成

    2-11 合并与拆分

    对单元格进行合并与拆分操作

    2-12 对齐方式

    可以调整文字在表格中的对齐方式
    可以调整文字的方向
    可以调整单元格的边距,这样单元格可以变的更小,文字也可以占更大的空间
    勾选可以调整单元格的边距,可以使本来重合的单元格边框分离
    还可以选择是否自动调整尺寸以适应内容

    2-13 表格制作(特惠报名表)

    已制作

    2-14 表格属性之表格

    可以设置表格的宽度,以及表格整体的对齐方式,选择左对齐文字环绕选择无可以进行左缩进的更改,通过表格定位可以更改环绕时文字距离表格的距离。

    2-15 表格属性之表格定位

    定位中需要选择位置和相对于,位置可以选择多种,相对于可以相对于页面,栏,页边距,纵向中是现对于段落,记得有随文字移动选项,以及是否允许重叠选项。

    2-16 表格属性之行与列单元格

    最小值的意思是指系统已经内置最小值,设置的值小于此值的话会应用内置的最小值,还有是否允许段页换行,是否在每页重复表头,此项需要仅选择需要重复的表头,设置列宽的时候,可以选择度量单位为百分比和英尺(厘米),适应文字选项可以使文字自动调整间距与大小适应表格。

    2-17 表格之数据

    可以把表格转换成文字,也可以把文本转换成表格,前者在布局中,后者使用插入表格工具。也可以使用公式,可以直接复制,但是需要按 F9刷新,最好不要在 word 里面进行函数运算。

    2-18 综合应用(送货单)

    对于表格占主体的文档可以直接建立表格然后去除部分边框

    2-19 表格嵌套应用

    对于小表格,我们可以在大表格中嵌套进小表格,然后去除边框,感觉间距太小的话可以分离边框

    2-20 表格之其他设置

    可以快速插入 word 内置的表格样式,插入时可以右键选择插入的位置
    不要在 word 里面打开 Excel,不如直接打开 Excel 方便

    第三章、Word 绘图与排版

    3-1 图形分类与绘制

    直接插入图形进行绘制

    3-2 绘图辅助设备-网格设置

    页面设置中可以找到绘图网格,先设置单位长度,后设置间隔,间隔是指两条线间分了几段

    3-3 图形基础操作(选择、复制、显示、大小)

    可以在选择窗格中进行图形的重命名,显示与隐藏
    复制的方式,直接按住 Ctrl 拖动,也可以按 Ctrl+D 进行复制,也可以用 F4来完成多次复制
    通过格式中的大小可以调整图形的大小,打开面板可以锁定横纵比

    3-4 层次、组合、旋转

    可右键组合,也可在绘图工具格式中组合,
    用鼠标可以直接进行自由旋转,也可以用快捷键进行旋转,Ctrl+Alt+左右箭头,旋转一度,Alt+左右箭头,旋转15度,在格式中可以进行90度旋转以及翻转,也可以进行精确的旋转。

    3-5 综合应用(图形绘制)

    绘制已完成

    3-6 分布与对齐

    注意相对位置

    3-7 综合应用(绘制笑脸和邮票)

    已绘制

    3-8 图形之轮廓

    在格式中调整轮廓以及填充,需要在展开的菜单栏中进行细致的调整,可以对线条等进行设置。

    3-9 图形之轮廓练习

    并列排布的的小方格可以使用虚线工具

    3-10 图形之渐变填充

    3-11 图形之图片纹理填充

    可以设置为重复的平铺纹理

    3-12 图形之图案填充

    3-13 自定义图案实例

    3-14 电话图标设计

    3-15 图形样式与阴影

    3-16 映像、发光、柔化边缘

    3-17 棱台与三维

    3-18 广告牌

    3-19 线条编辑

    按住 Ctrl 点击添加和删除顶点

    3-20 文本框

    插入形状中可以插入文本框,在形状中右键添加文字即可录入文字,也可以选中后直接进行文本的录入。文本框中的文字可以进入设置界面进行设置。一个文本框里的文字装不下可以使用创建链接把两个形状连接起来,共同显示文字,不需要时可以断开链接。

    3-21 综合应用(图文排版)

    已完成

    3-22 图片的样式、删除背景、裁剪

    3-23 图像处理

    word 内置了很多图片处理功能

    3-24 SMartArt

    可以添加形状,添加文字,来更好的表示,同时可以调整上下级关系。

    3-25 屏幕截图操作与应用

    3-26 艺术字

    3-27 综合应用

    3-28 定位与文字环绕方式

    3-29 首字下沉和图文框

    在插入中可以插入首字下沉效果,首字下沉是由图文框实现的

    3-30 公式插入与编辑

    插入中可以插入公式,word 里面内置了很多公式,也可以自己编辑,在公式编辑器里面有大量的数学符号及公式,并且可以保存自己编辑的常用公式。

    3-31 插入其他内容

    快捷键插入当天日期 Shift+Alt+D
    可以直接插入其他的程序内容,例如画图,公式编辑器之类的
    也可以直接插入其他文件中的文字

    3-32 、33、34、35 综合应用

    排版时先用表格确定框架,中间的空白可以使用空白细表格。

    第四章、Word 文档自动化

    4-1 手工制作多级目录

    可以选择相应的样式,然后根据目录级别增加和减少缩进量,也可以直接更改列表级别。

    4-2 自定义多级目录制作

    可以自己定义各个级别的格式,可以设置格式后留有空格还是制表符,可以用正规形式编号按钮更改样式。

    4-3 自定义多级目录制作(编号位置与编号之后设置)

    设置编号的位置以及编号之后的位置,以及不同级别的编号的缩进
    并且可以在制表位里设置前导符,但是注意设置位置时多设置一些

    4-4 多级列表之其它

    可以选择更改作用的范围
    并且可以设置第二级别不重新编号

    4-5 创建多级列表样式

    可以在列表中找到自己现在使用的列表样式,可以保存此样式到列表库
    也可以新建自己的列表样式,但是定义的列表样式需要设置此列表可以使用的文档范围
    删除多级列表样式,需要进入管理样式中删除

    4-6 利用大纲级别制作目录

    可以直接在段落选项中设置不同的大纲级别,设置的大纲级别只能使用,第一行第三个那种样式。

    4-7 样式制作目录

    可以在 Style 中新建格式,统一相同级别的 Style,然后直接根据内容应用样式,直接就可以设置好级别和样式。
    也可以直接利用 word 内置的标题等样式

    4-8 多级列表与样式的结合应用

    此功能需要在定义多级列表中设置样式链接,在链接出现矛盾时可以选择直接删除冲突的样式。

    4-9 自动生成目录

    先根据样式来设置级别,然后直接在 references 里选择 Table of Contents 插入 Content

    4-10 自动生成目录样式修改

    想要自定义目录的样式,就直接在 Table of Contents 中选择 Custom Table of Contents 里面的格式可以在 Formats 中选择 From template 然后在 Modify 中自定义的进行设置。可以仅根据大纲级别生成目录,之后再做调整。

    4-11 目录项域制作目录

    目录项域可以突破段落的限制,对于单一的文字或词语进行大纲级别的设置
    制作方法,先选择文字,按住 Shift+Alt+O 键调出标记目录项 Mark Table of Chontents Entry,然后设置级别即可。可以在不关闭该窗口的情况下进行其他文字的选择和调整。把目录标识符 Table identifier 设置为 C,据此生成目录后可以应用 Style,删除的方式可以直接用查找替换进行。

    4-12 自动生成多级列表几种方法总结

    生成目录的方法有四种,样式标题法,自定义样式法,段落大纲级别法,目录项域法
    创建目录时不能选择内容

    4-13 脚注、尾注

    尾注在页面结尾,脚注在文章结尾
    选中需要添加尾注的文字,然后 Insert Endnote,脚注同理
    更改序号等可以在设置中进行设置
    删除时需要把原文中的标志删除,在下方删除没用

    4-14 引文与目录

    引文指引用别人的话,书目相当于目录
    在相应的文本后 Insert Citation,然后填写相应的 Author,Title,Year 等信息,添加完之后添加书目,也即 Bibliography,文末就可以出现相应的信息

    4-15 题注

    给图片、表格等添加项目编号
    选中图片后插入题注,Insert Caption,可以选择标签 label 和位置 Position,可以为图片等添加目录,设置前导符 Tab leader 等信息后可以生成目录,需要选对信息才能进行显示
    生成目录时只能一类一类的生成

    4-16 题注

    在插入题注中可以设置编号的形式,并可以设置根据级别添加章节信息,选用相应的级别即可

    4-17 书签

    插入书签后可以直接用超链接链接到书签对应的位置

    4-18 超链接

    可以链接 url、本地路径、网络路径

    4-19 交叉引用

    用于当前文档的内部链接,可以实现文档中诸如引用见**页等操作

    4-20 索引

    把书刊中的主要概念和各种题名摘录下来,标明出处、页码,方便人查阅。

    4-21 索引分类与多级索引

    在正式格式下可以选择分类索引
    设置主索引项和次索引项,便可建立分级索引
    超过两级的,可以自己在域中修改,加上冒号内容冒号即可

    4-22 索引选项-页面范围与交叉引用

    在页面范围中可以选择相应的书签,需要把整篇都做成书签
    同时可以用在目录中交叉引用的方式显示

    4-23 自动创建索引

    先创建一个对应级别的表格,然后自动添加索引就可以直接添加。

    4-24 引文目录

    可以进行分类的更方便的索引,但不是索引

    4-25 主控文档

    合并多个文档的内容,同步进行编辑。
    进入大纲视图,找到主控文档,在第一级目录中创建然后插入文档即可
    保存后再打开会只有一个链接,进入大纲视图调整显示就可以了

    4-26 主档文档

    取消链接即可切断文档之间的同步连接。
    进行拆分操作后保存会在源目录产生几个拆分后的文档
    通过主控文档可以对多个文件进行统一的修改
    4.27 批注
    删除批注可以在审阅中删除

    4-28 修订

    启用修订状态然后进行修订即可,word 会记录你的修订并可以选择是否接受

    4-29 比较与合并

    比较功能可以补救未启用修订状态的一种功能
    多次使用合并功能可以同时使用多个文档进行比较

    4-30 页眉页脚

    页眉页脚操作和普通模式区别不大,可以插入图片等内容,
    进入页眉页脚编辑界面可以调整水印的位置以及大小的调整
    直接在文字编辑状态应用样式就可以直接删除页眉横线,也可以修改边框等设置

    4-31 页眉页脚

    可以设置首页不同,也可以设置奇偶页不同,也可以用分节符自定义分节设置

    4-32 文档视图

    在不同的视图中可以实现不同的操作

    4-33 文档视图

    4-34 显示与显示比例

    CTRL+中键,进行显示比例的调整

    4-35 窗口设置

    对同一文档进行多窗口的编辑和比较

    第五章、 Word 域

    5-1 Word 域基础

    Alt+F9显示和隐藏所有的域代码

    5-2 域的基础操作

    显示或隐藏指定的域代码 Shift+F9
    解除域的链接:Ctrl+Shift+F9
    域的插入:Ctrl+F9

    5-3 域之编号域

    Autonum 插入段落中,在不同段落中递增
    AutonumLGL 依赖大纲级别,形式为1.1
    AutonumOut 依赖大纲级别,形式为 I…A…1…a

    5-4 域之编号域

    Listnum 可以在任意位置插入
    LegalDefault··1.
    NumberDefault=无··1)
    OutlineDefault··I.
    设置起始值 \s 2例如{Listnum LegalDefault \s 3}
    设置级别 \I 2例如{Listnum LegalDefault \I 2}
    可以自己设置好多级目录格式后新建到域 Listnum 中,只要在 ListNum feild list name中键入名称即可

    5-5 域之文本格式设置

    Page 插入页码
    \*用于设置特定的文本如何显示
    A(a)lphabetic 将数字转换为小写字母或者大写字母
    Arabic 默认项,正常显示为阿拉伯数字
    Cardtext 用英文来显示阿拉伯数字
    Dollartext 用金额的大写数字来表示
    MergeFormat 使域结果不会因域的更新而改变格式

    5-6 域文本格式设置

    \*+下面各项
    firstcap 将显示结果中的第一个字母大写
    Caps 大写首字母(词首字母大写)
    lower 小写字母
    upper 大写字母
    Roman 将阿拉伯数字转化为罗马数字,例如{=34\*roman}

    5-7 域之节号、节号页数、保存数

    Revnum 保存次数
    Section 插入当前节号
    Sectionpages 插入本节的总页数

    # 第七章、 查找替换

    7-1 查找和替换

    Ctrl+F 查找,Ctrl+H 替换
    可以查找图片表格等

    7-2 查找规则

    可以选择区分大小写,全字匹配等选项,还可以选择读音相似(only English),查找单词的所有形式(only English),increment 渐进式搜索,边输入边查找,区分前缀后缀,忽略空格等

    7-3 查找替换

    搜索可以限制向下向上查找

    7-4 格式查找与替换

    设置格式时一定要选择空白的地方,因为选择的时候会更改格式
    查找时可以直接选择 style

    7-5 走进 word 通配符查找替换的世界

    给网址加前缀等操作

    7-6 查找替换之任意单个字符

    不使用通配符时^?代表任意单个字符
    使用通配符时代表任意单个字符

    7-7 查找替换之任意单个数字

    不使用通配符时^#代表任意单个数字
    使用通配符时[0-9]代表任意单个字符,可以用[4-8]表示大于4小于8的数字

    7-8 查找替换之任意单个字母

    不使用通配符时^$代表任意英文字母
    使用通配符时[a-z] [A-Z] [a-zA-Z]代表任意英文字母,也可以用[e-t][CPJ][,;。]等表示
    对于数字和字母混合可以用[A-Z0-9]

    7-9 查找替换之任意单个汉字

    使用通配符时[一-龥] 五笔 wgkm 输入 [一-﨩]代表任意汉字
    选择好查找内容后设置为不同颜色方便选取

    7-10 查找替换之任意多个字符

    使用通配符时*代表任意多个字符串,不能放末尾
    对于格式替换内容填写*
    7-11【西文字符】与【非】应用
    对于表格中的内容可以在表格格式中修改,选择作用于单元格
    所有的西文字符[^1-^127],包含符号
    [!0-9] 非数字
    [!a-zA-Z] 非字母亲
    [!一-﨩] 非汉字
    [!^1-^127]非英文字符符号

    7-12 空白字符

    段落标记为^p(特) ^13(通)
    手动换行符^I (特)^I or ^11(通)
    制表符^t(特)^t or ^9(通)
    空格 直接输入空格(特)^32(通)

    7-13 查找替换之量词

    1个以上前一字符或表达式 @={1,}
    n 个前一字符或表达式 { n }
    n 个以上前一字符或表达式 { n, }
    n 到 m 个前一字符或表达式 { n,m }
    中间不要有空格

    7-14 查找替换之分组

    找出叠字:([一-﨩])\1 (?)\1
    找出叠词:([一-﨩][一-﨩])\1 (??)\1
    删除重复叠词 查找:(?{2,})\1 替换:\1
    替换为中用\1 \2 \3表示第一 二 三个组,一个括号为一组

    7-15 查找替换之开头与结尾

    <开头与结尾>
    单词开始:<(通)
    单词结尾:>(通)
    相当于看不见的字符
    以 t 结束的单词:[a-z]@t>
    以 te 开始的单词:<te[a-z]{1,}
    查找以一开始的成语<一[一-﨩]{1,}

    7-16 查找替换综合应用

    查找中括号用 \[\]

    7-17 查找替换综合应用

    括号中尽量不要有段落标记
    7-19查找替换综合应用
    选取中间部分时,可以先选前部分,复制粘贴后再选后部分,*会代表任意内容来满足式子

    7-24 查找替换之剪贴板代码

    ^c 代表剪贴板中内容,可以为所有可以复制的内容

    展开全文
  • word使用中的☑方法

    2017-10-16 16:48:34
    Word文档中输入数字“2611” ,然后按下键盘上的快捷键 ALT + X,实现在word文档里边对需要√的框框,进行打钩。 此方法是直接创建 ☑,并不是在原先那个框框里边加入√。

    在Word文档中输入数字“2611” ,然后按下键盘上的快捷键 ALT + X,实现在word文档里边对需要√的框框,进行打钩。

    此方法是直接创建 ☑,并不是在原先那个框框里边加入√。

    展开全文
  • 这种方法的神奇之处在于纯自动,无须手动拖放。当然此方法的适用版本是office2016以及以后的版本,亲测office2007不行 office2016百度云分享网址: ... 提取码: 3uys 嫌弃百度云下载速度的可以到msdn去下载,是一样...
  • 『如何』让WORD中多行(常带下划线)头和尾都完全对齐 “为啥Word多行下划线后面总是长短不一,无论怎么调不是多了就是少了?怎样才能完美对齐呢?” 通过本文你可以 如何对齐Word中的多行文本,达到...
  • word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单、高效,因此引起了很多人的关注。由于 word2vec 的作者 Tomas Mikolov 在两篇相关的论文 [3,4] 中并没有谈及太多算法细节,因而...
  • 本文出处:CSDN http://blog.csdn.net/xcyyueqiu/article/details/52357567...打开倒是可以正常用word打开,文件关联是对的,重装office都没解决。 忍了几天终于忍不了啦,尝试网上搜了几次,都没有找到解决办法。进
  • Word Embedding与Word2Vec

    2017-10-19 03:44:03
    随着深度学习的兴起,研究人员开始设计基于神经网络的词嵌入方法,其中最为重要,也是当前最流行的Word Embedding方法就是Tomas Mikolov在谷歌工作时发明的Word2Vec方法,同时谷歌还开源了Word2Vec这个工具箱的源码...
  • 这是一个POI读取word 2003 和 word 2007的例子,是一个Eclipse工程,下载后直接导入工程,运行 src 目录下的 Test.java 类即可, 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包,也有需要...
  • 一,简介Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。二,相关概念...
  • 或者谷歌搜索syntax highlight code in word documents,检索结果的第一个。如下图:PS. 方法1和2打开的为同一个网站。二、步骤1.将你需要插入在word中的代码完整的复制到该网站提示的文本框内,选择你的代码类型,...
  • 但有时候还是迫不得已需要用Word写作,另外Word其实也有Word的好处,比如细节上的修改要比LaTeX方便。 从Matlab高亮代码复制到Word,中文会乱码开始,我就很想研究下如何在Word中展示漂亮的代码。今年寒假利用Vim...
  • word2vec使用指导

    2014-09-25 10:16:37
    word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。 一、理论概述 (主要来源于...
1 2 3 4 5 ... 20
收藏数 814,505
精华内容 325,802
关键字:

word