再谈word2003编程

    近期因为项目需要,写了许多word2003编程的东东.有时候遇到难题想查sdk说明,很难找到中文解释,对于e文不好的我来说,简直是天书.想必很多人多有感慨.
    下面列出内容是一些常用的内容说明,希望对大家有帮助.
    那就开始吧 注意,下文的WAPP是我定义的word文档工程变量


    
// 合并单元格
   table.Cell( 2 2 ).Merge(table.Cell( 2 3 ));

 
// 单元格分离
     object  Rownum  =   2 ;
    
object  Columnnum  =   2 ;
    table.Cell(
2 2 ).Split( ref  Rownum,  ref   Columnnum);

// 单元格对齐方式
     WApp.Selection.Cells.VerticalAlignment  = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

// 插入表行
     table.Rows.Add( ref  missing);

// 分页  object ib = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
    WApp.Selection.InsertBreak( ref  ib);

// 换行
     WApp.Selection.TypeParagraph();

 


  二、word文档设置
 

WApp.ActiveDocument.PageSetup.LineNumbering.Active  = 0 ; // 行编号
            WApp.ActiveDocument.PageSetup.Orientation  = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait; // 页面方向
            WApp.ActiveDocument.PageSetup.TopMargin  = WApp.CentimetersToPoints( float .Parse( " 2.54 " )); // 上页边距
            WApp.ActiveDocument.PageSetup.BottomMargin  =  WApp.CentimetersToPoints( float .Parse( " 2.54 " )); // 下页边距
            WApp.ActiveDocument.PageSetup.LeftMargin  =  WApp.CentimetersToPoints( float .Parse( " 3.17 " )); // 左页边距
            WApp.ActiveDocument.PageSetup.RightMargin  =  WApp.CentimetersToPoints( float .Parse( " 3.17 " )); // 右页边距
            WApp.ActiveDocument.PageSetup.Gutter  =  WApp.CentimetersToPoints( float .Parse( " 0 " )); // 装订线位置
            WApp.ActiveDocument.PageSetup.HeaderDistance  =  WApp.CentimetersToPoints( float .Parse( " 1.5 " )); // 页眉
            WApp.ActiveDocument.PageSetup.FooterDistance  =  WApp.CentimetersToPoints( float .Parse( " 1.75 " )); // 页脚
            WApp.ActiveDocument.PageSetup.PageWidth  =  WApp.CentimetersToPoints( float .Parse( " 21 " )); // 纸张宽度
            WApp.ActiveDocument.PageSetup.PageHeight  =  WApp.CentimetersToPoints( float .Parse( " 29.7 " )); // 纸张高度
            WApp.ActiveDocument.PageSetup.FirstPageTray  =  Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin; // 纸张来源
            WApp.ActiveDocument.PageSetup.OtherPagesTray  =  Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin; // 纸张来源
            WApp.ActiveDocument.PageSetup.SectionStart  =  Microsoft.Office.Interop.Word.WdSectionStart.wdSectionNewPage; // 节的起始位置:新建页
            WApp.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter  =   0 ; // 页眉页脚-奇偶页不同
            WApp.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter  =   0 ; // 页眉页脚-首页不同
            WApp.ActiveDocument.PageSetup.VerticalAlignment  =  Microsoft.Office.Interop.Word.WdVerticalAlignment.wdAlignVerticalTop; // 页面垂直对齐方式
            WApp.ActiveDocument.PageSetup.SuppressEndnotes  = 0 ; // 不隐藏尾注
            WApp.ActiveDocument.PageSetup.MirrorMargins  =   0 ; // 不设置首页的内外边距
            WApp.ActiveDocument.PageSetup.TwoPagesOnOne  =   false ; // 不双面打印
            WApp.ActiveDocument.PageSetup.BookFoldPrinting  = false ; // 不设置手动双面正面打印
            WApp.ActiveDocument.PageSetup.BookFoldRevPrinting  = false ; // 不设置手动双面背面打印
            WApp.ActiveDocument.PageSetup.BookFoldPrintingSheets  =   1 ; // 打印默认份数
            WApp.ActiveDocument.PageSetup.GutterPos  =  Microsoft.Office.Interop.Word.WdGutterStyle.wdGutterPosLeft; // 装订线位于左侧
            WApp.ActiveDocument.PageSetup.LinesPage  =   40 ; // 默认页行数量
            WApp.ActiveDocument.PageSetup.LayoutMode  =  Microsoft.Office.Interop.Word.WdLayoutMode.wdLayoutModeLineGrid; // 版式模式为“只指定行网格”

   三、光标移动

  // 移动光标
 
// 光标下移3行 上移3行
             object  unit  =  Microsoft.Office.Interop.Word.WdUnits.wdLine;
            
object  count  =   3 ;
            WApp.Selection.MoveEnd(
ref  unit, ref  count);
            WApp.Selection.MoveUp(
ref  unit,  ref  count,  ref  missing);
            
// Microsoft.Office.Interop.Word.WdUnits说明
            
// wdCell                  A cell. 
            
// wdCharacter             A character. 
            
// wdCharacterFormatting   Character formatting. 
            
// wdColumn                A column. 
            
// wdItem                  The selected item. 
            
// wdLine                  A line.  //
            
// wdParagraph             A paragraph. 
            
// wdParagraphFormatting   Paragraph formatting. 
            
// wdRow                   A row. 
            
// wdScreen                The screen dimensions. 
            
// wdSection               A section. 
            
// wdSentence              A sentence. 
            
// wdStory                 A story. 
            
// wdTable                 A table. 
            
// wdWindow                A window. 
            
// wdWord                  A word. 

// 录制的vb宏
            
//      ,移动光标至当前行首
            
//     Selection.HomeKey unit:=wdLine
            
//     '移动光标至当前行尾
            
//     Selection.EndKey unit:=wdLine
            
//     '选择从光标至当前行首的内容
            
//     Selection.HomeKey unit:=wdLine, Extend:=wdExtend
            
//     '选择从光标至当前行尾的内容
            
//     Selection.EndKey unit:=wdLine, Extend:=wdExtend
            
//     '选择当前行
            
//     Selection.HomeKey unit:=wdLine
            
//     Selection.EndKey unit:=wdLine, Extend:=wdExtend
            
//     '移动光标至文档开始
            
//     Selection.HomeKey unit:=wdStory
            
//     '移动光标至文档结尾
            
//     Selection.EndKey unit:=wdStory
            
//     '选择从光标至文档开始的内容
            
//     Selection.HomeKey unit:=wdStory, Extend:=wdExtend
            
//     '选择从光标至文档结尾的内容
            
//     Selection.EndKey unit:=wdStory, Extend:=wdExtend
            
//     '选择文档全部内容(从WholeStory可猜出Story应是当前文档的意思)
            
//     Selection.WholeStory
            
//     '移动光标至当前段落的开始
            
//     Selection.MoveUp unit:=wdParagraph
            
//     '移动光标至当前段落的结尾
            
//     Selection.MoveDown unit:=wdParagraph
            
//     '选择从光标至当前段落开始的内容
            
//     Selection.MoveUp unit:=wdParagraph, Extend:=wdExtend
            
//     '选择从光标至当前段落结尾的内容
            
//     Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
            
//     '选择光标所在段落的内容
            
//     Selection.MoveUp unit:=wdParagraph
            
//     Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
            
//     '显示选择区的开始与结束的位置,注意:文档第1个字符的位置是0
            
//     MsgBox ("第" & Selection.Start & "个字符至第" & Selection.End & "个字符")
            
//     '删除当前行
            
//     Selection.HomeKey unit:=wdLine
            
//     Selection.EndKey unit:=wdLine, Extend:=wdExtend
            
//     Selection.Delete
            
//     '删除当前段落
            
//     Selection.MoveUp unit:=wdParagraph
            
//     Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
            
//     Selection.Delete


// 表格的光标移动
// 光标到当前光标所在表格的地单元格
WApp.Selection.Tables[ 1 ].Cell( 1 1 ).Select();
// unit对象定义
object   unith  =  Microsoft.Office.Interop.Word.WdUnits.wdRow; // 表格行方式
             object  extend  =  Microsoft.Office.Interop.Word.WdMovementType.wdExtend; /**/ ///extend对光标移动区域进行扩展选择
             object  unitu  =  Microsoft.Office.Interop.Word.WdUnits.wdLine; // 文档行方式,可以看成表格一行.不过和wdRow有区别
             object  unitp  =  Microsoft.Office.Interop.Word.WdUnits.wdParagraph; // 段落方式,对于表格可以选择到表格行后的换车符,对于跨行合并的行选择,我能找到的最简单方式
             object  count = 1 ; // 光标移动量

 下面代码演示对于存在合并单元格的选择操作.合并单元格的选择问题一直是word的bug.部分object对象参照上面代码

 

 上面这个是表格合并样式.要如何才能选择2行标题栏尼.看下面代码

// 定位到表格第1单元格
WApp.Selection.Tables[ 1 ].Cell( 1 1 ).Select();
// 定位到第1个单元格第1个字符前          
WApp.Selection.HomeKey( ref  unith,  ref  missing);
// 扩展到行尾,选择表第1行            
WApp.Selection.EndKey( ref  unith,  ref  extend);
// 定义表格标题的行数量,titlerow为参数            
object  strtitlerow = titlerow - 1 ;
// 移动光标选择第1行的末尾段落标记            
WApp.Selection.MoveDown( ref  unitp,  ref  count,  ref  extend);
// 选择下一行,因为合并的原因,如表格标题最后列是合并,只选择了2行的部分
            WApp.Selection.MoveDown( ref  unitu,  ref  strtitlerow,  ref  extend);
// 扩展到该行的末端,保证合并行能全部选择到
            WApp.Selection.EndKey( ref  unith,  ref  extend);
// 复制选择内容到剪贴板
            WApp.Selection.Copy();
// 下面是移动光标到任何位置并粘贴内容.我程序中目的是到表格换页的时候自动插入下一页的表头.
            WApp.Selection.Tables[ 1 ].Cell(System.Convert.ToInt32(strRownum),  1 ).Select();
            WApp.Selection.HomeKey(
ref  unith,  ref  missing);
            WApp.Selection.Paste();

四、段落格式设定
// 段落格式设定
            WApp.Selection.ParagraphFormat.LeftIndent  =  WApp.CentimetersToPoints( float .Parse( " 0 " )); // 左缩进
            WApp.Selection.ParagraphFormat.RightIndent  =  WApp.CentimetersToPoints( float .Parse( " 0 " )); // 右缩进
            WApp.Selection.ParagraphFormat.SpaceBefore  = float .Parse( " 0 " ); // 段前间距
            WApp.Selection.ParagraphFormat.SpaceBeforeAuto  = 0 ; //
            WApp.Selection.ParagraphFormat.SpaceAfter  =   float .Parse( " 0 " ); // 段后间距
            WApp.Selection.ParagraphFormat.SpaceAfterAuto  =   0 ; //
            WApp.Selection.ParagraphFormat.LineSpacingRule  =  Microsoft.Office.Interop.Word.WdLineSpacing.wdLineSpaceSingle; // 单倍行距
            WApp.Selection.ParagraphFormat.Alignment  =  Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphJustify; // 段落2端对齐
            WApp.Selection.ParagraphFormat.WidowControl  =   0 ; // 孤行控制
            WApp.Selection.ParagraphFormat.KeepWithNext  =   0 ; // 与下段同页
            WApp.Selection.ParagraphFormat.KeepTogether  =   0 ; // 段中不分页
            WApp.Selection.ParagraphFormat.PageBreakBefore  =   0 ; // 段前分页
            WApp.Selection.ParagraphFormat.NoLineNumber  =   0 ; // 取消行号
            WApp.Selection.ParagraphFormat.Hyphenation  =   1 ; // 取消段字
            WApp.Selection.ParagraphFormat.FirstLineIndent  =  WApp.CentimetersToPoints( float .Parse( " 0 " )); // 首行缩进
            WApp.Selection.ParagraphFormat.OutlineLevel  =  Microsoft.Office.Interop.Word.WdOutlineLevel.wdOutlineLevelBodyText;
            WApp.Selection.ParagraphFormat.CharacterUnitLeftIndent 
=   float .Parse( " 0 " );
            WApp.Selection.ParagraphFormat.CharacterUnitRightIndent 
=   float .Parse( " 0 " );
            WApp.Selection.ParagraphFormat.CharacterUnitFirstLineIndent 
=   float .Parse( " 0 " );
            WApp.Selection.ParagraphFormat.LineUnitBefore 
=   float .Parse( " 0 " );
            WApp.Selection.ParagraphFormat.LineUnitAfter 
=   float .Parse( " 0 " );
            WApp.Selection.ParagraphFormat.AutoAdjustRightIndent 
=   1 ;
            WApp.Selection.ParagraphFormat.DisableLineHeightGrid 
= 0 ;
            WApp.Selection.ParagraphFormat.FarEastLineBreakControl 
= 1 ;
            WApp.Selection.ParagraphFormat.WordWrap 
=   1 ;
            WApp.Selection.ParagraphFormat.HangingPunctuation 
=   1 ;
            WApp.Selection.ParagraphFormat.HalfWidthPunctuationOnTopOfLine 
=   0 ;
            WApp.Selection.ParagraphFormat.AddSpaceBetweenFarEastAndAlpha 
=   1 ;
            WApp.Selection.ParagraphFormat.AddSpaceBetweenFarEastAndDigit 
=   1 ;
            WApp.Selection.ParagraphFormat.BaseLineAlignment 
=  Microsoft.Office.Interop.Word.WdBaselineAlignment.wdBaselineAlignAuto;

五、字体格式设定
// 字体格式设定
            WApp.Selection.Font.NameFarEast  =   " 华文中宋 " ;
            WApp.Selection.Font.NameAscii 
=   " Times New Roman " ;
            WApp.Selection.Font.NameOther 
=   " Times New Roman " ;
            WApp.Selection.Font.Name 
=   " 宋体 " ;
            WApp.Selection.Font.Size 
=   float .Parse( " 14 " );
            WApp.Selection.Font.Bold 
=   0 ;
            WApp.Selection.Font.Italic 
=   0 ;
            WApp.Selection.Font.Underline 
=  Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineNone;
            WApp.Selection.Font.UnderlineColor 
=  Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;
            WApp.Selection.Font.StrikeThrough 
= 0 ; // 删除线
            WApp.Selection.Font.DoubleStrikeThrough  =   0 ; // 双删除线
            WApp.Selection.Font.Outline  = 0 ; // 空心
            WApp.Selection.Font.Emboss  =   0 ; // 阳文
            WApp.Selection.Font.Shadow  =   0 ; // 阴影
            WApp.Selection.Font.Hidden  =   0 ; // 隐藏文字
            WApp.Selection.Font.SmallCaps  =   0 ; // 小型大写字母
            WApp.Selection.Font.AllCaps  =   0 ; // 全部大写字母
            WApp.Selection.Font.Color  =  Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;
            WApp.Selection.Font.Engrave 
=   0 ; // 阴文
            WApp.Selection.Font.Superscript  =   0 ; // 上标
            WApp.Selection.Font.Subscript  =   0 ; // 下标
            WApp.Selection.Font.Spacing  =   float .Parse( " 0 " ); // 字符间距
            WApp.Selection.Font.Scaling  =   100 ; // 字符缩放
            WApp.Selection.Font.Position  =   0 ; // 位置
            WApp.Selection.Font.Kerning  =   float .Parse( " 1 " ); // 字体间距调整
            WApp.Selection.Font.Animation  =  Microsoft.Office.Interop.Word.WdAnimation.wdAnimationNone; // 文字效果
            WApp.Selection.Font.DisableCharacterSpaceGrid  = false ;
            WApp.Selection.Font.EmphasisMark 
=  Microsoft.Office.Interop.Word.WdEmphasisMark.wdEmphasisMarkNone;

六、终于找到了获取光标位置的东东。那里找到的忘了,感谢提供的老大。放到这里供大家参考。
有了这个和上面内容,相信大家对word文档的控制应该到了随心所欲的地步,爽啊
获取的c#语法
// get_Information
Selection.get_Information(WdInformation.wdActiveEndPageNumber)

  // 关于行号-页号-列号-位置
            
// information 属性 
            
// 返回有关指定的所选内容或区域的信息。variant 类型,只读。 
            
// expression.information(type) 
            
// expression 必需。该表达式返回一个 range 或 selection 对象。 
            
// type long 类型,必需。需要返回的信息。可取下列 wdinformation 常量之一: 
            
// wdactiveendadjustedpagenumber 返回页码,在该页中包含指定的所选内容或区域的活动结尾。如果设置了一个起始页码,并对页码进行了手工调整,则返回调整过的页码。 
            
// wdactiveendpagenumber 返回页码,在该页中包含指定的所选内容或区域的活动结尾,页码从文档的开头开始计算而不考虑对页码的任何手工调整。 
            
// wdactiveendsectionnumber 返回节号,在该节中包含了指定的所选内容或区域的活动结尾。 
            
// wdatendofrowmarker 如果指定的所选内容或区域位于表格的行结尾标记处,则本参数返回 true。 
            
// wdcapslock 如果大写字母锁定模式有效,则本参数返回 true。 
            
// wdendofrangecolumnnumber 返回表格列号,在该表格列中包含了指定的所选内容或区域的活动结尾。 
            
// wdendofrangerownumber 返回表格行号,在该表格行包含了指定的所选内容或区域的活动结尾。 
            
// wdfirstcharactercolumnnumber 返回指定的所选内容或区域中第一个字符的位置。如果所选内容或区域是折叠的,则返回所选内容或区域右侧紧接着的字符编号。 
            
// wdfirstcharacterlinenumber 返回所选内容中第一个字符的行号。如果 pagination 属性为 false,或 draft 属性为 true,则返回 - 1。 
            
// wdframeisselected 如果所选内容或区域是一个完整的图文框文本框,则本参数返回 true。 
            
// wdheaderfootertype 返回一个值,该值表明包含了指定的所选内容或区域的页眉或页脚的类型,如下表所示。 值 页眉或页脚的类型 
            
// - 1 无 
            
// 0 偶数页页眉 
            
// 1 奇数页页眉 
            
// 2 偶数页页脚 
            
// 3 奇数页页脚 
            
// 4 第一个页眉 
            
// 5 第一个页脚 
            
// wdhorizontalpositionrelativetopage 返回指定的所选内容或区域的水平位置。该位置是所选内容或区域的左边与页面的左边之间的距离,以磅为单位。如果所选内容或区域不可见,则返回 - 1。 
            
// wdhorizontalpositionrelativetotextboundary 返回指定的所选内容或区域相对于周围最近的正文边界的左边的水平位置,以磅为单位。如果所选内容或区域没有显示在当前屏幕,则本参数返回 - 1。 
            
// wdinclipboard 有关此常量的详细内容,请参阅 microsoft office 98 macintosh 版的语言参考帮助。 
            
// wdincommentpane 如果指定的所选内容或区域位于批注窗格,则返回 true。 
            
// wdinendnote 如果指定的所选内容或区域位于页面视图的尾注区内,或者位于普通视图的尾注窗格中,则本参数返回 true。 
            
// wdinfootnote 如果指定的所选内容或区域位于页面视图的脚注区内,或者位于普通视图的脚注窗格中,则本参数返回 true。 
            
// wdinfootnoteendnotepane 如果指定的所选内容或区域位于页面视图的脚注或尾注区内,或者位于普通视图的脚注或尾注窗格中,则本参数返回 true。详细内容,请参阅前面的 wdinfootnote 和 wdinendnote 的说明。 
            
// wdinheaderfooter 如果指定的所选内容或区域位于页眉或页脚窗格中,或者位于页面视图的页眉或页脚中,则本参数返回 true。 
            
// wdinmasterdocument 如果指定的所选内容或区域位于主控文档中,则本参数返回 true。 
            
// wdinwordmail 返回一个值,该值表明了所选内容或区域的的位置,如下表所示。值 位置 
            
// 0 所选内容或区域不在一条电子邮件消息中。 
            
// 1 所选内容或区域位于正在发送的电子邮件中。 
            
// 2 所选内容或区域位于正在阅读的电子邮件中。 
            
// wdmaximumnumberofcolumns 返回所选内容或区域中任何行的最大表格列数。 
            
// wdmaximumnumberofrows 返回指定的所选内容或区域中表格的最大行数。 
            
// wdnumberofpagesindocument 返回与所选内容或区域相关联的文档的页数。 
            
// wdnumlock 如果 num lock 有效,则本参数返回 true。 
            
// wdovertype 如果改写模式有效,则本参数返回 true。可用 overtype 属性改变改写模式的状态。 
            
// wdreferenceoftype 返回一个值,该值表明所选内容相对于脚注、尾注或批注引用的位置,如下表所示。 值 描述 
            
// — 1 所选内容或区域包含、但不只限定于脚注、尾注或批注引用中。 
            
// 0 所选内容或区域不在脚注、尾注或批注引用之前。 
            
// 1 所选内容或区域位于脚注引用之前。 
            
// 2 所选内容或区域位于尾注引用之前。 
            
// 3 所选内容或区域位于批注引用之前。 
            
// wdrevisionmarking 如果修订功能处于活动状态,则本参数返回 true。 
            
// wdselectionmode 返回一个值,该值表明当前的选定模式,如下表所示。 值 选定模式 
            
// 0 常规选定 
            
// 1 扩展选定 
            
// 2 列选定 
            
// wdstartofrangecolumnnumber 返回所选内容或区域的起点所在的表格的列号。 
            
// wdstartofrangerownumber 返回所选内容或区域的起点所在的表格的行号。 
            
// wdverticalpositionrelativetopage 返回所选内容或区域的垂直位置,即所选内容的上边与页面的上边之间的距离,以磅为单位。如果所选内容或区域没有显示在屏幕上,则本参数返回 - 1。 
            
// wdverticalpositionrelativetotextboundary 返回所选内容或区域相对于周围最近的正文边界的上边的垂直位置,以磅为单位。如果所选内容或区域没有显示在屏幕上,则本参数返回 - 1。 
            
// wdwithintable 如果所选内容位于一个表格中,则本参数返回 true。 
            
// wdzoompercentage 返回由 percentage 属性设置的当前的放大百分比。

七、呼,终于写完了,鼓掌。不要拿鸡蛋砸我。大家有好的心得,欢迎交流。不要光看不回。

转载于:https://www.cnblogs.com/Andmm/archive/2008/06/18/1224422.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值