office编程必不可少

原文: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)如何设置标题样式,“标题一”,“标题二”等 参考

[c-sharp] view plaincopyprint?

  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中内嵌的图形等资源

[c-sharp] view plaincopyprint?

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

[c-sharp] view plaincopyprint?

  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)生成目录

[c-sharp] view plaincopyprint?

  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)目录格式怎么设置?比如加粗、倾斜等

利用段落格式设置

[c-sharp] view plaincopyprint?

    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.             }  
时间: 2024-05-23 01:57:47

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

如何运用office编程进行格式转换

问题描述 各位:麻烦问一下怎么样编程实现Excel的表格数据编辑后,转换成为Word文档..描述清楚点:我有一个Excel表格数据,进行了编辑(居中,加边框,填充)之后,然后将内容复制到Word文档中.因为任务量多,我自己想编程实现这一过程,但是好像C#在这个方面很在行,我就到这个板块问一下,有知道的说一声,谢谢. 解决方案 解决方案二:用vba吧,快解决方案三:使用剪贴板,写上5.6行代码就行了.解决方案四:可以在office中录制宏实现批量操作.解决方案五:引用1楼liucqa的回复: 用v

OFFICE编程思路(VBA)

编程 下面是vb打开文件的代码: If Dir("D:\excel.bz") = "" Then '判断EXCEL是否打开 Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类 xlApp.Visible = True '设置EXCEL可见 Set xlBook = xlApp.Workbooks.Open("D:\test.xls") '打开EXCEL工作簿 Se

Visual Studio 2010:Office编程

Microsoft Office 为组织提供了一个最终用户非常熟悉的环境来快速创建业务应用程序.构建 Office 业务应用程序为组织提供了利用以下内容的大量机会:编辑客户关系管理 (CRM) 系统.将从业务线应用程序提取的数据前置.托管商业智能报告,以及很多其他可能性. 尽管 Office 开发为组织提供了很多有价值的机会,但是之前它也为这些应用程序的开发和部署提出了一些挑战.早期的托管语言版本也推动了使用 Office 创建应用程序的方式. 调用大量的 Office API 方法通常很难,因

关于在.net中的office编程的问题

问题描述 我最近做一个项目需要对excel文件进行操作,我想获取excel文件中具有数据的行的总数,不知道excel组件是否提供了相应函数,我查了MSDN,没有找到!

使用VC++ ATL实现Office的COM插件

摘要 本文介绍了一种使用VC++ ATL(Active Template Library),利用IDTExtensibility2接口,为Microsoft Word加入功能简单的COM插件(addin),加入工具栏按钮和菜单等可视部件,并为其加入响应事件的方法,并在最后简单说明了实现与Office宏混合编程的方法. 说到Office相关的编程,大家首先想到的可能是VBA(Visual Basic for Application),事实上, ATL也是一种很好的工具.这里介绍的就是一种基于ATL

《Python核心编程(第3版)》——导读

前 言 欢迎各位读者打开本书 很高兴各位读者能够允许我们来帮助你们尽可能快.尽可能深入地学习Python.Core Python系列图书的目标不只是教会开发人员Python语言,我们还希望各位读者能够形成足够的知识库,从而能够开发任何应用领域的软件. 在其他的Core Python系列图书(Core Python Programming和Core Python Language Fundamentals)中,我们不仅向读者讲授Python语言的语法,还希望读者能够深入掌握Python的运行机制.

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

         IT软件经过了这么些年的发展,已经形成了很多的软件公司和开发团队,而且当前编程语言也有很多种,让开发人员能够有很大的选择.现在国际上的开发阵营基本分为ASP.NET.JAVA和PHP三种,但是每种开发语言能够进行的开发问题是统一的,本文就从IT软件的编程方向出发,介绍下当前主流的开发方向.   一.网站: 现在的互联网,随着电子商务的发展和企业内部办公系统的应用,以及编程语言的三大阵营的发展,已经形成了很多具体应用的网站系统.但是,在企业内部,很多还是使用ASP.NET和JAV

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

Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和要点总结. Hadoop是一个强大的并行框架,它允许任务在其分布式集群上并行处理.但是编写.调试Hadoop程序都有很大难度.正因为如此,Hadoop的开发者开发出了Hadoop Eclipse插件,它在Hadoop的开发环境中嵌入了Eclipse,从而实现了开发环境的图形化,降低了编程难度.在安装

C语言初学者的困惑-如何由dos向windows转变

很多人学C语言很长一段时间了,还不知C究竟能干什么,以为学习c语言没什么用,纯粹是为了应付学校的考试.更有人说"学C语言?别做如此愚蠢的行为了!赶快学C++吧!"这种看法是不对的,不应该把c跟c++之间划起绝对的界限,过分看重c++而把c贬得一无是处,这是很片面的.C++功能虽然强大,但它毕竟是c的"超集",在c++里有哪一处找不到c的影子呢?没有c的支持,c++只能是无本之木. 一般情况下,c++编程方式编写的程序源代码量小,但编译后的代码量较大,运行的速度略低,