原文:office编程必不可少 [转]

1. 微软官方实例:

段落、表格、图表

HOW TO:利用 Visual C# .NET 使 Word 自动新建文档

2. 学习资源

(1)Word in the Office 基础知识,必读,下面的总结里有内容摘要

http://msdn.microsoft.com/en-us/library/Aa201330

网友翻译版:http://blog.csdn.net/hustliangchen/archive/2011/01/05/6118459.aspx

(2)Word类的结构图,Application、document、Range、Selection等,必读

http://msdn.microsoft.com/en-us/library/aa164012

(3)word 2007 对象模型 :

http://msdn.microsoft.com/en-us/library/bb244515(v=office.12).aspx

(4)Microsoft.Office.Interop.Word

http://msdn.microsoft.com/zh-cn/library/ms254954(v=Office.11).aspx

(5)WPS 二次开发接口文档 wpsapi.chm

中文方便阅读,CSDN下载

(6)飞蛾 Word VBA 参考教程

全中文Word类库,必读

http://www.feiesoft.com/vba/word/

(7)用VBA宏提高Word操作效率——需要精研的20个经典实例

http://pcmag.hexun.com/2010-03-18/123031946.html

3.一些总结

(1)Document 代表一个具体的word文档, Documents 是 Document的集合,用index索引来表示某一个document。ActiveDocument属性是当前焦点(focus)的document。我们一般不会用索引来引用文档,因为索引值会随着文档的打开和关闭而改变;通常我们用 ActiveDocument属性,或者 Documents 集合的Add 或 Open方法返回的document对象变量来引用。Add或Open的document会成为 ActiveDocument,如果想使其它document成为activeDocument,则使用 document对象的ActiveDocument方法。

用文件名指明具体Documnet,Documents("Report.doc").Activate();

(2) characters组成words,words组成sentences,sentences组成paragraphs,因此一个document中会包含这样四个集合: Characters Words, Sentences ,Paragraphs collection。此外,document还可能包含sections的集合,而一个section又会有HeadersFooters 页眉页脚集合。

(3)Paragraph段落,由一个段落标志和所有文本组成。拷贝段落时如果包含了段落标志,则段落格式也会一同拷贝。不想拷贝格式的话就不要拷贝段落标志。

(3)Range对象,代表一块连续的由起始字符和结束字符定义的区域,可以小到只有一个插入光标或大至整个文档内容,它也可以是但并不必须是当前selection代表的区域。可以在一个文档中定义多个Range对象。

我们通常用Range类定义一个变量来创建Range对象,然后用Document的Range方法或其它对象的Range属性来实例化这个Range对象。

(4)Selection对象

可代表光标

该对象代表窗口或窗格中的当前所选内容。所选内容代表文档中被选定(或突出显示的)的区域,若文档中没有所选内容,则代表插入点。每个文档窗格只能有一个活动的 Selection对象,并且整个应用程序中只能有一个活动的 Selection对象。
使用 Selection对象
使用Selection属性可返回 Selection对象。如果没有使用 Selection属性的对象识别符,Word 将返回活动文档窗口的活动窗格中的所选内容。

Text属性是其选中的内容

Copy、Cut、Paste方法进行复制、剪切、粘贴等操作

(5)sections

Sections.Add 方法

该方法用于返回一个 Section 对象,该对象表示添加至文档中的新节。
Function Add([Range As Range = 0],  [Start As WpsSectionStart = 2]) As Section

参数说明
Range    Variant 类型,可选。在其之前插入分节符的区域。如果忽略本参数,则将分节符插至文档末尾。
Start    Variant 类型,可选。要添加的分节符类型。WpsSectionStart 类型。如果忽略本参数,则添加“下一页”类型的分节符。
    WpsSectionStart 类型可以是下列常量之一:
    值     描述
    wpsSectionContinuous     连续分节符
    wpsSectionEvenPage     偶数页分节符
    wpsSectionNewColumn     节的结尾
    wpsSectionNewPage     下一页分节符(默认)
    wpsSectionOddPage     奇数页分节符

Sections 参考MSDN

Section  参考MSDN

4. 具体使用

(1)如何设置标题样式,“标题一”,“标题二”等 参考

  1. public void AddTitle(string s)
  2. {
  3. //Word段落
  4. Word.Paragraph p;
  5. p = oDoc.Content.Paragraphs.Add(ref missing);
  6. //设置段落中的内容文本
  7. p.Range.Text = s;
  8. //设置为一号标题
  9. object style = Word.WdBuiltinStyle.wdStyleHeading1;
  10. p.set_Style(ref style);
  11. //添加到末尾
  12. p.Range.InsertParagraphAfter();  //在应用 InsertParagraphAfter 方法之后,所选内容将扩展至包括新段落。
  13. }
  14. ///
  15. /// 添加普通段落
  16. ///
  17. ///
  18. public void AddParagraph(string s)
  19. {
  20. Word.Paragraph p;
  21. p = oDoc.Content.Paragraphs.Add(ref missing);
  22. p.Range.Text = s;
  23. object style = Word.WdBuiltinStyle.wdStyleBodyText;
  24. p.set_Style(ref style);
  25. p.Range.InsertParagraphAfter();
  26. }

/// 添加普通段落 /// /// public void AddParagraph(string s) { Word.Paragraph p; p = oDoc.Content.Paragraphs.Add(ref missing); p.Range.Text = s; object style = Word.WdBuiltinStyle.wdStyleBodyText; p.set_Style(ref style); p.Range.InsertParagraphAfter(); }

(2)如何插入表格

使用Word的Table类,有人还使用DataTable类进行辅助

(3)如何插入图片

InlineShapes是Word中内嵌的图形等资源

  1. public void InsertImage(string strPicPath, float picWidth, float picHeight)
  2. {
  3. string FileName = strPicPath;
  4. object LinkToFile = false;
  5. object SaveWithDocument = true;
  6. object Anchor = oWord.Selection.Range;
  7. oWord.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor).Select();
  8. oWord.Selection.InlineShapes[1].Width = picWidth; // 图片宽度
  9. oWord.Selection.InlineShapes[1].Height = picHeight; // 图片高度
  10. }

? 插入图片后为什么又没了?

这可能是由于你在插入图片后,又插入东西,但是你没有移动光标,所以把图片给覆盖掉了。

解决方法:光标移动

(4)光标移动

A:标签:

系统预定义标签:object oEndOfDoc = "//endofdoc";

自定义标签:

B:利用标签获取位置

Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

插入段落、表格时都会用到这个位置:

oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);

oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);

  1. // Go to a predefined bookmark, if the bookmark doesn't exists the application will raise an error
  2. public void GotoBookMark(string strBookMarkName)
  3. {
  4. // VB :  Selection.GoTo What:=wdGoToBookmark, Name:="nome"
  5. object Bookmark = (int)Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
  6. object NameBookMark = strBookMarkName;
  7. oWord.Selection.GoTo(ref Bookmark, ref missing, ref missing, ref NameBookMark);
  8. }
  9. public void GoToTheEnd()
  10. {
  11. // VB :  Selection.EndKey Unit:=wdStory
  12. object unit;
  13. unit = Microsoft.Office.Interop.Word.WdUnits.wdStory;
  14. oWord.Selection.EndKey(ref unit, ref missing);
  15. }
  16. public void GoToTheBeginning()
  17. {
  18. // VB : Selection.HomeKey Unit:=wdStory
  19. object unit;
  20. unit = Microsoft.Office.Interop.Word.WdUnits.wdStory;
  21. oWord.Selection.HomeKey(ref unit, ref missing);
  22. }

(5)生成目录

  1. public void insertContent() //利用标题样式生成目录
  2. {
  3. GoToTheBeginning();
  4. object start = 0;
  5. object end = 0;
  6. Word.Range myRange = oWord.ActiveDocument.Range(ref start, ref end); //位置区域
  7. object useHeadingStyle = true; //使用Head样式
  8. object upperHeadingLevel = 1;  //最大一级
  9. object lowerHeadingLevel = 3;  //最小三级
  10. object useHypeLinks = true;
  11. //TablesOfContents的Add方法添加目录
  12. oDoc.TablesOfContents.Add(myRange, ref useHeadingStyle,
  13. ref upperHeadingLevel, ref lowerHeadingLevel,
  14. ref missing, ref missing, ref missing, ref missing,
  15. ref missing, ref useHypeLinks, ref missing, ref missing);
  16. oDoc.TablesOfContents[1].UpdatePageNumbers(); //更新页码
  17. }
  18. #endregion

(6)目录格式怎么设置?比如加粗、倾斜等

利用段落格式设置

    1. public void formatContent() {
    2. Word.TableOfContents myContent = oDoc.TablesOfContents[1]; //目录
    3. Word.Paragraphs myParagraphs = myContent.Range.Paragraphs; //目录里的所有段,一行一段
    4. int[] FirstParaArray = new int[3]{ 1, 8, 9 }; //一级标题,直接指定
    5. foreach (int i in FirstParaArray) {
    6. myParagraphs[i].Range.Font.Bold = 1;  //加粗
    7. myParagraphs[i].Range.Font.Name = "黑体"; //字体
    8. myParagraphs[i].Range.Font.Size = 12; //小四
    9. myParagraphs[i].Range.ParagraphFormat.SpaceBefore = 6; //段前
    10. myParagraphs[i].Range.ParagraphFormat.SpaceAfter = 6; //段后间距
    11. }
    12. }

office编程必不可少的更多相关文章

  1. office编程必不可少 [转]

    1. 微软官方实例: 段落.表格.图表 HOW TO:利用 Visual C# .NET 使 Word 自动新建文档 2. 学习资源 (1)Word in the Office 基础知识,必读,下面的 ...

  2. 使用.Net访问Office编程接口(PIA和IA的区别)

    在这篇文章里面,我将向大家介绍如何在.Net中访问Office所公开的编程接口.其实,不管是使用哪种具体的技术来针对Office进行开发(比如VSTO,或者用C#编写一个Office Add-in,或 ...

  3. Python——office编程

    一.office编程需求 二.Excel编程 import xlrd path=input("输入路径:") workbook=xlrd.open_workbook(path)#打 ...

  4. 演练:Office 编程(C# 和 Visual Basic)

    https://msdn.microsoft.com/zh-cn/library/ee342218(v=vs.110).aspx PIA的全称是 primary interop assembly  主 ...

  5. Python——Microsoft Office编程

    一.Excel 需要安装xlrd和xlwt这两个库   1.打开excel readbook = xlrd.open_workbook(r'\test\canying.xlsx') 2.获取读入的文件 ...

  6. IT软件的编程方向 - 进阶者系列 - 学习者系列文章

    IT软件经过了这么些年的发展,已经形成了很多的软件公司和开发团队,而且当前编程语言也有很多种,让开发人员能够有很大的选择.现在国际上的开发阵营基本分为ASP.NET.JAVA和PHP三种,但是每种开发 ...

  7. Spire.Office组件使用例子

    用.NET开发程序通常要涉及到对Office文件读写操作,比较常见的操作比如提取文本,导出Excel格式数据,动态生成word文档,生成pdf文档等. 实现这些功能通常需要在服务端安装office软件 ...

  8. 0基础搭建Hadoop大数据处理-编程

    Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和 ...

  9. Python核心编程(第3版)PDF高清晰完整中文版|网盘链接附提取码下载|

    一.书籍简介<Python核心编程(第3版)>是经典畅销图书<Python核心编程(第二版)>的全新升级版本.<Python核心编程(第3版)>总共分为3部分.第1 ...

随机推荐

  1. 从源代码分析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(让你的Struts2代码更简洁——如何培养框架设计能力

    源代码文件:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor ...

  2. oracle 10g操作和维护手册

    1.    检查数据库基本状况... 1.1.     检查Oracle实例状态... 1.2.     检查Oracle服务进程... 1.3.     检查Oracle监听状态... 2.    ...

  3. BZOJ 1823 JSOI 2010 盛宴 2-SAT

    标题效果:有着n材料的种类,m陪审团. 每种材料具有两种不同的方法.每个法官都有两个标准.做出来的每一个法官的菜必须至少满足一个需求. 问:是否有这样一个程序. 思考:2-SAT经典的内置图形问题.因 ...

  4. Event Sourcing - ENode(三)

    接上一篇 http://www.cnblogs.com/dopeter/p/4903328.html 老板昨天在第二篇介绍中回复代码和文字无法一一对应.为了更好的让老板为大家解惑,把第二篇最后的猜测的 ...

  5. JavaEE(14) - JPA关联映射

    1. 单向N-1关联映射 2. 单向1-1关联映射 3. 单向1-N关联映射 4. 单向N-N关联映射 5. 双向1-1关联映射 6. 双向1-N关联映射 7. 双向N-N关联映射 1. 单向N-1关 ...

  6. Git提交代码的处理流程(转)

    Jerry 工作在wchar_support分支.他改变了名称的功能和测试后,他提交他的变化. [jerry@CentOS src]$ git branch master * wchar_suppor ...

  7. Nyoj 吝啬的国度(图论&&双DFS)

    描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...

  8. smb_精简安装

    yum install samba vim /etc/samba/smb.conf    [修改下自己要发布的目录  .eg : path = /home/iknow] smbpasswd -a ik ...

  9. HttpGet 请求

    import java.net.HttpURLConnection; import java.text.SimpleDateFormat; import java.util.Calendar; imp ...

  10. 【SSH三个框架】Hibernate第七基金会:不少下属业务

    相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系,但也有许多关系.但,只知道它是不够的,Hibernate它是一种面向对象 ...