转自:http://blog.csdn.net/jiutao_tang/article/details/6574740

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%28v=office.12%29.aspx

(4)Microsoft.Office.Interop.Word

http://msdn.microsoft.com/zh-cn/library/ms254954%28v=Office.11%29.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)如何设置标题样式,“标题一”,“标题二”等 参考

         public void AddTitle(string s)
{
//Word段落
Word.Paragraph p;
p = oDoc.Content.Paragraphs.Add(ref missing);
//设置段落中的内容文本
p.Range.Text = s;
//设置为一号标题
object style = Word.WdBuiltinStyle.wdStyleHeading1;
p.set_Style(ref style);
//添加到末尾
p.Range.InsertParagraphAfter(); //在应用 InsertParagraphAfter 方法之后,所选内容将扩展至包括新段落。
}
/// <summary>
/// 添加普通段落
/// </summary>
/// <param name="s"></param>
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中内嵌的图形等资源

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

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

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

解决方法:光标移动

(4)光标移动

A:标签:

系统预定义标签:object oEndOfDoc = "//endofdoc"; /* /endofdoc is a predefined bookmark 系统预定义的书签?*/

自定义标签:

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);

 // Go to a predefined bookmark, if the bookmark doesn't exists the application will raise an error
public void GotoBookMark(string strBookMarkName)
{
// VB : Selection.GoTo What:=wdGoToBookmark, Name:="nome"
object Bookmark = (int)Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
object NameBookMark = strBookMarkName;
oWord.Selection.GoTo(ref Bookmark, ref missing, ref missing, ref NameBookMark);
}
public void GoToTheEnd()
{
// VB : Selection.EndKey Unit:=wdStory
object unit;
unit = Microsoft.Office.Interop.Word.WdUnits.wdStory;
oWord.Selection.EndKey(ref unit, ref missing);
}
public void GoToTheBeginning()
{
// VB : Selection.HomeKey Unit:=wdStory
object unit;
unit = Microsoft.Office.Interop.Word.WdUnits.wdStory;
oWord.Selection.HomeKey(ref unit, ref missing);
}

(5)生成目录

 public void insertContent() //利用标题样式生成目录
{
GoToTheBeginning();
object start = ;
object end = ;
Word.Range myRange = oWord.ActiveDocument.Range(ref start, ref end); //位置区域
object useHeadingStyle = true; //使用Head样式
object upperHeadingLevel = ; //最大一级
object lowerHeadingLevel = ; //最小三级
object useHypeLinks = true;
//TablesOfContents的Add方法添加目录
oDoc.TablesOfContents.Add(myRange, ref useHeadingStyle,
ref upperHeadingLevel, ref lowerHeadingLevel,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref useHypeLinks, ref missing, ref missing);
oDoc.TablesOfContents[].UpdatePageNumbers(); //更新页码
}
#endregion

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

利用段落格式设置

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

C# 操作Word知识汇总的更多相关文章

  1. Spring-data-redis操作redis知识汇总

    什么是spring-data-redis spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作,使用java操作redis最常用 ...

  2. Oracle手边常用70则脚本知识汇总

    Oracle手边常用70则脚本知识汇总 作者:白宁超 时间:2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...

  3. 【转】ACM博弈知识汇总

    博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍 ...

  4. jquery基础知识汇总

    jquery基础知识汇总 一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQu ...

  5. ACM博弈知识汇总(转)

    博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻 ...

  6. [转]【eoeAndroid索引】史上最牛最全android开发知识汇总

    一.开发环境搭建 (已完成) 负责人:kris 状态:已完成 所整理标签为:搭建 SDK JDK NDK Eclipse ADT 模拟器 AVD 调试器(DEBUG) DDMS 测试 日志 Logca ...

  7. AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)

    AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...

  8. [转帖]xserver相关知识汇总

    xserver相关知识汇总 https://blog.csdn.net/QTVLC/article/details/81739984   本文主要是从以下几个方面介绍xorg-xserver 相关的知 ...

  9. Hive知识汇总

    两种Hive表 hive存储:数据+元数据 托管表(内部表) 创建表: hive> create table test2(id int,name String,tel String) > ...

随机推荐

  1. python核心编程第六章练习6-14

    随机数.设计一个“石头.剪子.布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种:石头.剪子.布.胜利者从下面的规则产生, ...

  2. linux笔记:shell基础-bash基本功能

    历史命令的调用: 命令和文件补全(如果当前有多个可选的补全,则按2次tab键,可以列出所有的可选项): 命令别名: 让别名永久生效: 删除别名: bash常用快捷键: 标准输入输出: 输出重定向: 输 ...

  3. 一个关于自定义类型作为HashMap的key的问题

    在之前的项目需要用到以自定义类型作为HashMap的key,遇到一个问题:如果修改了已经存储在HashMap中的实例,会发生什么情况呢?用一段代码来试验: import java.util.HashM ...

  4. MYSQL 5.6中禁用INNODB引擎

    并不是所有人都需要INNODB引擎,虽然它弥补了MYSQL缺乏事务支持的毛病,但是它的磁盘性能一直是让人比较担忧的.另外比较老的PHP系统,大多是采用MYISAM引擎在MYSQL建表,似乎INNODB ...

  5. 交换机的端口状态是UP,但是查询该端口下的MAC地址为空

    (电脑已关机)电脑与交换机直连的端口状态 还是 UP ,但是 查询该端口下的 MAC地址为空. 初步怀疑原因: Wake-on-LAN(电脑关机,网卡还在工作) Wake-On-LAN简称WOL,是一 ...

  6. yii2.0高级框架配置时打开init.bat秒退的解决方法 (两种方法)

    第一种: 这几天刚接触到yii2.0框架,在配置advanced版本时运行init.bat初始化文件时老是闪退: 用cmd运行该文件时显示:The OpenSSL PHP extension is r ...

  7. My Game --背景

    在GitHub MyGame clone 代码,添加到配置并新建好的工程中运行下来就可以看到这个画面: 中间的小点是显示的当前触摸点,本文暂不讨论.图中的蓝天是蓝色的 LayerColor this- ...

  8. iOS打开百度地图、高德地图导航

    1.判断手机里是否已经安装了百度地图或者高德地图: BOOL hasBaiduMap = NO; BOOL hasGaodeMap = NO; if ([[UIApplication sharedAp ...

  9. Model2模型介绍

    在JSP课程中有 Model1 模型的介绍 模型二: 实例接JSP课程,先去看JSP课程了

  10. XCode6.0的iOS免证书真机测试方法(MAC及黑苹果均有效)

    目前在XCode上开发的iOS程序只能在模拟器Simulator中运行,如果要放到真机上测试,需要苹果官方认证的开发者账号,购买开发者证书iDP,99美金一年啊!!! 作为刚开始学习iOS编程的菜鸟, ...