PLC状态机编程-如何在STL中采取状态机。C#操作Word (1)Word对象模型。

by admin on 2018年9月19日

整PLC编程多年,一直无掌握状态机,学习matlab后,发现状态机编程异常方便,过去众多编程时之迷惑豁然开朗起来。今天及大家享用一下争当STL中以状态机。

Word对象模型  (.Net
Perspective)

下面是为此状态机描述的支配任务。

正文主要对于Visual Studio中利用C# 开发有关Word的应用程序

图片 1

来源:Understandingthe Word Object Model from a .NET Developer’s Perspective.aspx)

五要命目标

Application           :代表Microsoft
Word应用程序本身

Document           
:代表一个Word文档

Selection             
:代表时入选的区域(高亮),没有当选区域时表光标点

Bookmarks           :书签

Range                 
:代表同样块区域,与Selection类似,不过貌似不可见

 

下看一下Word的目标组织图:

图片 2

OK,下面是针对上述几怪目标的着力特点的叙说,让咱们本着其来局部为主的认。

 


Application是Document和Selection的基类。通过Application的性和方,我们得决定Word的怪条件。

 


Document代表一个Word文档,当你新建一个Word文档或者打开一个就部分Word文档,你以开创一个Document对象,该目标为投入到Words
Documents
Collection中。拥有焦点的Document称为ActiveDocument,可以经过Application对象的ActiveDocument属性获得当前文档对象

 


Selection代表时相中的区域,它通常是高亮显示的(例如,你要是转同样段文字的书,你首先得选
 
 中这段文字,那么选中的这块区域就是是当下文档的Selection对象所包含的区域)

 

l  Range对象为代表文档中之平等块区域,它抱有以下特征

 

  •   包含一个开局位置与一个了却位置
  •   它好分包光标点,一截文本或者全体文档
  •   它富含空格,tab以及paragraph marks
  •   它可是目前入选的区域,当然也得以无是眼前当选区域
  •   它让动态创建
  •   当您以一个Range的最后插入文本,这将扩展该Range

 


Bookmark对象为代表同片区域,一般采取Bookmark来号文档中的职位,它来如下特点

 

  •   书签一般生名字
  •   Saved with the document,且文档关闭了然后书签继续存在
  •   书签通常是潜伏的,但为足以经过代码设置其也可见

 


下面分别介绍5老目标:

1. The Application Object

由此Application对象,你可以拜Word的备目标同Collections。

参考更多:MSDN-Word2007-Application
Object.aspx)

1.1      Application对象的性能(只介绍部分,完整内容请参考MSDN)

ActiveWindow    返回一个Window对象表示有焦点之窗口

 

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void CreateNewWindowAndTile()  
  3. {  
  4.    // Create a new window from the active document.  
  5.    Word.Window wnd = ThisApplication.ActiveWindow.NewWindow();  
  6.    
  7.    // Tile the two windows.  
  8.    Object value = Word.WdArrangeStyle.wdTiled;  
  9.    ThisApplication.Windows.Arrange(ref value);  
  10. }  

    // C#
    public void CreateNewWindowAndTile()
    {
    // Create a new window from the active document.
    Word.Window wnd = ThisApplication.ActiveWindow.NewWindow();

    // Tile the two windows.
    Object value = Word.WdArrangeStyle.wdTiled;
    ThisApplication.Windows.Arrange(ref value);
    }

 

tips:   The Arrange method, like many
methods in Word,requires C# developers to pass one or more parameters
using the “ref”keyword. This means that the parameter you pass must be
stored in a variablebefore you can pass it to the method.

        In every case, you’ll need to
create an Object variable, assign the variable thevalue you’d like to
pass to the method, and pass the variable using the ref keyword. You’ll
find many examples of this technique throughout this document.


l  ActiveDocument        当前活动文档对象

 

l  ActivePrinter             当前动打印机

 

l  ActiveWindow           当前走窗口

 

l  Caption                     文档标题

[csharp] view
plain
copy
print?

  1. // C#安word文档标题  
  2. public void SetApplicationCaption()   
  3. {  
  4.     // Change caption in title bar.  
  5.     ThisApplication.Caption = “My New Caption”;  
  6. }  

    // C#设置word文档标题
    public void SetApplicationCaption()
    {

    // Change caption in title bar.
    ThisApplication.Caption = "My New Caption";
    

    }

l  CapsLock   返回大小写锁定键状态

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void CapsLockOn()   
  3. {  
  4.     MessageBox.Show(ThisApplication.CapsLock.ToString());  
  5. }  

    // C#
    public void CapsLockOn()
    {

    MessageBox.Show(ThisApplication.CapsLock.ToString());
    

    }

 

l  DisplayAlerts 用于安装于代码允许时如何处理警示,它来三种植选择:       

1.wdAlertsAll             
                  显示所有信息和警告(默认)

2.wdAlertsMessageBox                
仅展示消息框

3.wdAlertsNone                            
忽略任何警示

脚是拖欠属性的周边用法:

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void DisplayAlerts()   
  3. {  
  4.     // Turn off display of messages and alerts.  
  5.     try   
  6.     {  
  7.         ThisApplication.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;  
  8.         // Your code runs here without any alerts.  
  9.         // . . .code doing something here.  
  10.    
  11.     }   
  12.     catch (Exception ex)  
  13.     {  
  14.         // Do something with your exception.  
  15.    
  16.     }   
  17.     finally   
  18.     {  
  19.         // Turn alerts on again when done.  
  20.         ThisApplication.DisplayAlerts = Word.WdAlertLevel.wdAlertsAll;  
  21.     }  
  22. }  

    // C#
    public void DisplayAlerts()
    {

    // Turn off display of messages and alerts.
    try 
    {
        ThisApplication.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
        // Your code runs here without any alerts.
        // . . .code doing something here.
    
    } 
    catch (Exception ex)
    {
        // Do something with your exception.
    
    } 
    finally 
    {
        // Turn alerts on again when done.
        ThisApplication.DisplayAlerts = Word.WdAlertLevel.wdAlertsAll;
    }
    

    }

 

 

l  DisplayStatusBar      可以读/写;用于表示是否出示状态栏

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void ToggleStatusBar()   
  3. {  
  4.     // Toggle display of the status bar.  
  5.     bool bln = ThisApplication.DisplayStatusBar;  
  6.     ThisApplication.DisplayStatusBar = !bln;  
  7. }  

    // C#
    public void ToggleStatusBar()
    {

    // Toggle display of the status bar.
    bool bln = ThisApplication.DisplayStatusBar;
    ThisApplication.DisplayStatusBar = !bln;
    

    }

 

l  Path           返回时应用程序的途径

[csharp] view
plain
copy
print?

  1. // C#  
  2. MessageBox.Show(ThisApplication.Path);  

    // C#
    MessageBox.Show(ThisApplication.Path);

 

l  Selection    只读对象,表示手上选择的区域(也得表示光标点位置)

 

l  UserName  读或写用户称

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void ChangeUserName()   
  3. {  
  4.     string  str = ThisApplication.UserName;  
  5.     MessageBox.Show(str);  
  6.    
  7.     // Change UserName.  
  8.     ThisApplication.UserName = “Dudley”;  
  9.     MessageBox.Show(ThisApplication.UserName);  
  10.     // Restore original UserName.  
  11.     ThisApplication.UserName = str;  
  12. }  

    // C#
    public void ChangeUserName()
    {

    string  str = ThisApplication.UserName;
    MessageBox.Show(str);
    
    // Change UserName.
    ThisApplication.UserName = "Dudley";
    MessageBox.Show(ThisApplication.UserName);
    // Restore original UserName.
    ThisApplication.UserName = str;
    

    }

l  Visible        只有为true时才可见

[csharp] view
plain
copy
print?

  1. // C#  
  2. try   
  3. {  
  4.     ThisApplication.Visible = false;  
  5.     // Do whatever it is, invisibly.  
  6. }   
  7. catch (Exception ex)  
  8. {  
  9.     // Your exception handler here.  
  10. }   
  11. finally   
  12. {  
  13.     ThisApplication.Visible = true;  
  14. }  

    // C#
    try
    {

    ThisApplication.Visible = false;
    // Do whatever it is, invisibly.
    

    }
    catch (Exception ex)
    {

    // Your exception handler here.
    

    }
    finally
    {

    ThisApplication.Visible = true;
    

    }

 

1.2      Application对象的方

 

l  CheckSpelling 检查拼写

 

l  Help 弹出助对话框,有三种:WdHelp,WdHelpAbout,WdHelpSearch

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void DisplayHelpAbout()   
  3. {  
  4.     Object value = Word.WdHelpType.wdHelpAbout;  
  5.     ThisApplication.Help(ref value);  
  6. }  

    // C#
    public void DisplayHelpAbout()
    {

    Object value = Word.WdHelpType.wdHelpAbout;
    ThisApplication.Help(ref value);
    

    }

 

l  Move         移动窗口

l  Resize        改变窗口大小

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void MoveAndResizeWindow()   
  3. {  
  4.     // None of this will work if the window is   
  5.     // maximized or minimized.  
  6.     ThisApplication.ActiveWindow.WindowState =   
  7.         Word.WdWindowState.wdWindowStateNormal;  
  8.    
  9.     // Position at upper left corner.  
  10.     ThisApplication.Move(0, 0);  
  11.    
  12.     // Size to 300 x 600 points.  
  13.     ThisApplication.Resize(300, 600);  
  14. }  

    // C#
    public void MoveAndResizeWindow()
    {

    // None of this will work if the window is 
    // maximized or minimized.
    ThisApplication.ActiveWindow.WindowState = 
        Word.WdWindowState.wdWindowStateNormal;
    
    // Position at upper left corner.
    ThisApplication.Move(0, 0);
    
    // Size to 300 x 600 points.
    ThisApplication.Resize(300, 600);
    

    }

 

l  Quit          
退出Word,可以带来参数WdSaveOptions:三个可选值分别是:      

1.wdSaveChanges

        2.wdPromptToSaveChanges

        3.wdDoNotSaveChanges

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Automatically save changes.  
  3. Object saveChanges     = Word.WdSaveOptions.wdSaveChanges;  
  4. Object originalFormat  = Type.Missing;  
  5. Object routeDocument   = Type.Missing;  
  6. ThisApplication.Quit(  ref saveChanges,   
  7.                        ref originalFormat,   
  8.                        ref routeDocument);  
  9.    
  10. // Prompt to save changes.  
  11. saveChanges    = Word.WdSaveOptions.wdPromptToSaveChanges;  
  12. originalFormat  = Type.Missing;  
  13. routeDocument  = Type.Missing;  
  14. ThisApplication.Quit(  ref saveChanges,   
  15.                        ref originalFormat,   
  16.                        ref routeDocument);  
  17.    
  18. // Quit without saving changes.  
  19. saveChanges    = Word.WdSaveOptions.wdDoNotSaveChanges;  
  20. originalFormat  = Type.Missing;  
  21. routeDocument  = Type.Missing;  
  22. ThisApplication.Quit(  ref saveChanges,   
  23.                        ref originalFormat,   
  24.                        ref routeDocument);  

    // C#
    // Automatically save changes.
    Object saveChanges = Word.WdSaveOptions.wdSaveChanges;
    Object originalFormat = Type.Missing;
    Object routeDocument = Type.Missing;
    ThisApplication.Quit( ref saveChanges,

                       ref originalFormat, 
                       ref routeDocument);
    

    // Prompt to save changes.
    saveChanges = Word.WdSaveOptions.wdPromptToSaveChanges;
    originalFormat = Type.Missing;
    routeDocument = Type.Missing;
    ThisApplication.Quit( ref saveChanges,

                       ref originalFormat, 
                       ref routeDocument);
    

    // Quit without saving changes.
    saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
    originalFormat = Type.Missing;
    routeDocument = Type.Missing;
    ThisApplication.Quit( ref saveChanges,

                       ref originalFormat, 
                       ref routeDocument);
    

 

2. The
Document Object

     使用Document对象允许你针对一个文档进行操作,同时鉴于Documents
Collection的在,你得操作有都开辟的文档。

参考更多:MSDN-Word2007-Document
Object.aspx)

2.1        Document Object
Collections

一个文档可以分包一下几乎看似对象:

 

  • l  Characters
  • l  Words
  • l  Sentences
  • l  Paragraphs
  • l  Sections
  • l  Headers/Footers 

 

2.2 引用文档

   你得引用一个Documents
Collection中的Document对象。引用的艺术是采用索引(1-based),例如,如下代码引用了collection中的第一只文档

[csharp] view
plain
copy
print?

  1. // C#  
  2. Word.Document doc = (Word.Document) ThisApplication.Documents[1];  

    // C#
    Word.Document doc = (Word.Document) ThisApplication.Documents[1];

本,你吗可以通过文档的名来引用它

[csharp] view
plain
copy
print?

  1. // C#  
  2. Word.Document doc =   
  3.     (Word.Document) ThisApplication.Documents[“MyDoc.doc”];  

    // C#
    Word.Document doc =

    (Word.Document) ThisApplication.Documents["MyDoc.doc"];
    

 

2.3        打开,关闭及新建文档

 

l  Add           新建word文档  

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Create a new document based on Normal.dot.  
  3. Object template = Type.Missing;  
  4. Object newTemplate = Type.Missing;  
  5. Object documentType = Type.Missing;  
  6. Object visible = Type.Missing;   
  7.    
  8. ThisApplication.Documents.Add(   
  9.   ref template, ref newTemplate, ref documentType, ref visible);  

    // C#
    // Create a new document based on Normal.dot.
    Object template = Type.Missing;
    Object newTemplate = Type.Missing;
    Object documentType = Type.Missing;
    Object visible = Type.Missing;

    ThisApplication.Documents.Add(
    ref template, ref newTemplate, ref documentType, ref visible);

 

l  Open 打开word文档

[csharp] view
plain
copy
print?

  1. // C#  
  2. Object filename = @”C:\Test\MyNewDocument”;  
  3. Object confirmConversions = Type.Missing;  
  4. Object readOnly = Type.Missing;  
  5. Object addToRecentFiles = Type.Missing;  
  6. Object passwordDocument = Type.Missing;  
  7. Object passwordTemplate = Type.Missing;  
  8. Object revert = Type.Missing;  
  9. Object writePasswordDocument = Type.Missing;  
  10. Object writePasswordTemplate = Type.Missing;  
  11. Object format = Type.Missing;  
  12. Object encoding = Type.Missing;  
  13. Object visible = Type.Missing;  
  14. Object openConflictDocument = Type.Missing;  
  15. Object openAndRepair  = Type.Missing;  
  16. Object documentDirection = Type.Missing;  
  17. Object noEncodingDialog = Type.Missing;  
  18.    
  19. ThisApplication.Documents.Open(ref filename,   
  20.     ref confirmConversions, ref readOnly, ref addToRecentFiles,   
  21.     ref passwordDocument, ref passwordTemplate, ref revert,   
  22.     ref writePasswordDocument, ref writePasswordTemplate,   
  23.     ref format, ref encoding, ref visible, ref openConflictDocument,   
  24.     ref openAndRepair , ref documentDirection, ref noEncodingDialog);  

    // C#
    Object filename = @”C:\Test\MyNewDocument”;
    Object confirmConversions = Type.Missing;
    Object readOnly = Type.Missing;
    Object addToRecentFiles = Type.Missing;
    Object passwordDocument = Type.Missing;
    Object passwordTemplate = Type.Missing;
    Object revert = Type.Missing;
    Object writePasswordDocument = Type.Missing;
    Object writePasswordTemplate = Type.Missing;
    Object format = Type.Missing;
    Object encoding = Type.Missing;
    Object visible = Type.Missing;
    Object openConflictDocument = Type.Missing;
    Object openAndRepair = Type.Missing;
    Object documentDirection = Type.Missing;
    Object noEncodingDialog = Type.Missing;

    ThisApplication.Documents.Open(ref filename,

    ref confirmConversions, ref readOnly, ref addToRecentFiles, 
    ref passwordDocument, ref passwordTemplate, ref revert, 
    ref writePasswordDocument, ref writePasswordTemplate, 
    ref format, ref encoding, ref visible, ref openConflictDocument, 
    ref openAndRepair , ref documentDirection, ref noEncodingDialog);
    

 

l  Save 保存word文档

[csharp] view
plain
copy
print?

  1. // 保存有文档  
  2. Object noPrompt = true;  
  3. Object originalFormat = Type.Missing;  
  4. ThisApplication.Documents.Save(ref noPrompt, ref originalFormat);  
  5.    
  6. // C#封存时文档  
  7. ThisApplication.ActiveDocument.Save();  
  8.    

    // 保存有文档
    Object noPrompt = true;
    Object originalFormat = Type.Missing;
    ThisApplication.Documents.Save(ref noPrompt, ref originalFormat);

    // C#保存时文档
    ThisApplication.ActiveDocument.Save();

 

[csharp] view
plain
copy
print?

  1. // 保存指定名称的文档  
  2. Object file = “MyNewDocument.doc”;  
  3. ThisApplication.Documents.get_Item(ref file).Save();  

    // 保存指定名称的文档
    Object file = “MyNewDocument.doc”;
    ThisApplication.Documents.get_Item(ref file).Save();

 

l  SaveAs 另存为

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Save the document. In a real application,  
  3. // you’d want to test to see if the file  
  4. // already exists. This will overwrite any previously   
  5. // existing documents.  
  6. Object fileName = @”C:\Test\MyNewDocument.doc”;  
  7. Object fileFormat = Type.Missing;  
  8. Object lockComments = Type.Missing;  
  9. Object password = Type.Missing;  
  10. Object addToRecentFiles = Type.Missing;  
  11. Object writePassword = Type.Missing;  
  12. Object readOnlyRecommended = Type.Missing;  
  13. Object embedTrueTypeFonts = Type.Missing;  
  14. Object saveNativePictureFormat = Type.Missing;  
  15. Object saveFormsData = Type.Missing;  
  16. Object saveAsAOCELetter = Type.Missing;  
  17. Object encoding = Type.Missing;  
  18. Object insertLineBreaks = Type.Missing;  
  19. Object allowSubstitutions = Type.Missing;  
  20. Object lineEnding = Type.Missing;  
  21. Object addBiDiMarks = Type.Missing;  
  22.    
  23. ThisDocument.SaveAs(ref fileName, ref fileFormat, ref lockComments,   
  24.   ref password, ref addToRecentFiles, ref writePassword,   
  25.   ref readOnlyRecommended, ref embedTrueTypeFonts,   
  26.   ref saveNativePictureFormat, ref saveFormsData,   
  27.   ref saveAsAOCELetter, ref encoding, ref insertLineBreaks,   
  28.   ref allowSubstitutions, ref lineEnding, ref addBiDiMarks);  

    // C#
    // Save the document. In a real application,
    // you’d want to test to see if the file
    // already exists. This will overwrite any previously
    // existing documents.
    Object fileName = @”C:\Test\MyNewDocument.doc”;
    Object fileFormat = Type.Missing;
    Object lockComments = Type.Missing;
    Object password = Type.Missing;
    Object addToRecentFiles = Type.Missing;
    Object writePassword = Type.Missing;
    Object readOnlyRecommended = Type.Missing;
    Object embedTrueTypeFonts = Type.Missing;
    Object saveNativePictureFormat = Type.Missing;
    Object saveFormsData = Type.Missing;
    Object saveAsAOCELetter = Type.Missing;
    Object encoding = Type.Missing;
    Object insertLineBreaks = Type.Missing;
    Object allowSubstitutions = Type.Missing;
    Object lineEnding = Type.Missing;
    Object addBiDiMarks = Type.Missing;

    ThisDocument.SaveAs(ref fileName, ref fileFormat, ref lockComments,
    ref password, ref addToRecentFiles, ref writePassword,
    ref readOnlyRecommended, ref embedTrueTypeFonts,
    ref saveNativePictureFormat, ref saveFormsData,
    ref saveAsAOCELetter, ref encoding, ref insertLineBreaks,
    ref allowSubstitutions, ref lineEnding, ref addBiDiMarks);

 

 

l  Close 关闭word文档

[csharp] view
plain
copy
print?

  1. // 关闭所有文档  
  2. Object saveChanges     = Word.WdSaveOptions.wdSaveChanges;  
  3. Object originalFormat  = Type.Missing;  
  4. Object routeDocument   = Type.Missing;  
  5. ThisApplication.Documents.Close(ref saveChanges,   
  6.                                ref originalFormat,   
  7.                                ref routeDocument);  

    // 关闭所有文档
    Object saveChanges = Word.WdSaveOptions.wdSaveChanges;
    Object originalFormat = Type.Missing;
    Object routeDocument = Type.Missing;
    ThisApplication.Documents.Close(ref saveChanges,

                               ref originalFormat, 
                               ref routeDocument);
    

 

[csharp] view
plain
copy
print?

  1. // 关闭 active document   
  2. Object saveChanges     = Word.WdSaveOptions.wdDoNotSaveChanges;  
  3. Object originalFormat  = Type.Missing;  
  4. Object routeDocument   = Type.Missing;  
  5. ThisDocument.Close(    ref saveChanges,   
  6.                        ref originalFormat,  
  7.                        ref routeDocument);  
  8.    
  9. // Close MyNewDocument and save changes without prompting.  
  10. Object name     = “MyNewDocument.doc”;  
  11. saveChanges    = Word.WdSaveOptions.wdSaveChanges;  
  12. originalFormat  = Type.Missing;  
  13. routeDocument  = Type.Missing;  
  14.    
  15. Word.Document doc = ThisApplication.Documents.get_Item(ref name);  
  16. ThisDocument.Close(    ref saveChanges,   
  17.                        ref originalFormat,   
  18.                        ref routeDocument);  

    // 关闭 active document
    Object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
    Object originalFormat = Type.Missing;
    Object routeDocument = Type.Missing;
    ThisDocument.Close( ref saveChanges,

                       ref originalFormat,
                       ref routeDocument);
    

    // Close MyNewDocument and save changes without prompting.
    Object name = “MyNewDocument.doc”;
    saveChanges = Word.WdSaveOptions.wdSaveChanges;
    originalFormat = Type.Missing;
    routeDocument = Type.Missing;

    Word.Document doc = ThisApplication.Documents.get_Item(ref name);
    ThisDocument.Close( ref saveChanges,

                       ref originalFormat, 
                       ref routeDocument);
    

 

l  实例:遍历DocumentsCollection

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void SaveUnsavedDocuments()   
  3. {  
  4.     // Iterate through the Documents collection.  
  5.     string  str;  
  6.     StringWriter  sw = new StringWriter();  
  7.    
  8.     foreach (Word.Document doc in ThisApplication.Documents)  
  9.     {  
  10.         if (!doc.Saved )   
  11.         {  
  12.             // Save the document.  
  13.             doc.Save();  
  14.             sw.WriteLine(doc.Name);  
  15.         }  
  16.     }   
  17.    
  18.     str = sw.ToString();  
  19.     if ( str == string.Empty )   
  20.     {  
  21.     str = “No documents need saving.”;  
  22.     }   
  23.     MessageBox.Show(str, “SaveUnsavedDocuments”);  
  24. }  

    // C#
    public void SaveUnsavedDocuments()
    {

    // Iterate through the Documents collection.
    string  str;
    StringWriter  sw = new StringWriter();
    
    foreach (Word.Document doc in ThisApplication.Documents)
    {
        if (!doc.Saved ) 
        {
            // Save the document.
            doc.Save();
            sw.WriteLine(doc.Name);
        }
    } 
    
    str = sw.ToString();
    if ( str == string.Empty ) 
    {
    str = "No documents need saving.";
    } 
    MessageBox.Show(str, "SaveUnsavedDocuments");
    

    }

3.
The Selection
Object

 

Selection对象表示时选取的area。在word应用程序中,假如你若让同一段落字符变成黑体,你要首先选择该段文字,然后用样式。在代码中呢是同等的道理,你一旦首先定义selection的区域然后开展操作。你得以Selection对象在文档中展开抉择,格式化,操作,添加文本等。

Selection对象是一直存在的,如果手上尚无选其它东西,那么她代表一个insertion
point。因此,在操作Seleciton之前知道它们蕴含的始末是好重要的。

Tips:    Selection对象与Range对象来成千上万分子是相近的,它们之间的分是Selection对象指的凡具体在图形界面的区域,而Range对象表示的区域是不可见的(当然通过调用方法可以要该可见)

 

1.1      Using the Type Property

  
Selection的类别有许多。比如,你要针对性同摆设表的同一列进行操作,你当保证该列已经selected,否则会油然而生运行时不当。

得经过Selection对象的
Type属性获取你用的信,Type属性包含一个WdSelectionType的枚举类型成员。它发出如下几单价值:

  • wdSelectionBlock
  • wdSelectionColumn
  • wdSelectionFrame
  • wdSelectionInlineShape   表示一致帧图片
  • wdSelectionIP                    表示插入点(insertion point)
  • wdSelectionNormal          表示当选的文件或者文本以及其它对象的结
  • wdNoSelection
  • wdSelectionRow
  • wdSelectionShape

下是Type属性的利用例子

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void ShowSelectionType()   
  3. {  
  4.     string  str;  
  5.     switch (ThisApplication.Selection.Type)   
  6.     {  
  7.         case Word.WdSelectionType.wdSelectionBlock:  
  8.             str = “block”;  
  9.             break;  
  10.         case Word.WdSelectionType.wdSelectionColumn:  
  11.             str = “column”;  
  12.             break;  
  13.         case Word.WdSelectionType.wdSelectionFrame:  
  14.             str = “frame”;  
  15.             break;  
  16.         case Word.WdSelectionType.wdSelectionInlineShape:  
  17.             str = “inline shape”;  
  18.             break;  
  19.         case Word.WdSelectionType.wdSelectionIP:  
  20.             str = “insertion point”;  
  21.             break;  
  22.         case Word.WdSelectionType.wdSelectionNormal:  
  23.             str = “normal text”;  
  24.             break;  
  25.         case Word.WdSelectionType.wdNoSelection:  
  26.             str = “no selection”;  
  27.             break;  
  28.         case Word.WdSelectionType.wdSelectionRow:  
  29.             str = “row”;  
  30.             break;  
  31.         default:  
  32.             str = “(unknown)”;  
  33.             break;  
  34.     }  
  35.     MessageBox.Show(str, “ShowSelectionType”);  
  36. }  

    // C#
    public void ShowSelectionType()
    {

    string  str;
    switch (ThisApplication.Selection.Type) 
    {
        case Word.WdSelectionType.wdSelectionBlock:
            str = "block";
            break;
        case Word.WdSelectionType.wdSelectionColumn:
            str = "column";
            break;
        case Word.WdSelectionType.wdSelectionFrame:
            str = "frame";
            break;
        case Word.WdSelectionType.wdSelectionInlineShape:
            str = "inline shape";
            break;
        case Word.WdSelectionType.wdSelectionIP:
            str = "insertion point";
            break;
        case Word.WdSelectionType.wdSelectionNormal:
            str = "normal text";
            break;
        case Word.WdSelectionType.wdNoSelection:
            str = "no selection";
            break;
        case Word.WdSelectionType.wdSelectionRow:
            str = "row";
            break;
        default:
            str = "(unknown)";
            break;
    }
    MessageBox.Show(str, "ShowSelectionType");
    

    }

 

1.2      Navigating and Selecting Text

为判定什么为入选了,你啊得使下面的主意。

 

1.2.1  Home and End Key Method

于运Word时,我们解,按下键盘的HOME键将使光标移动及光标所在行的行首,按下END键将如光标移动至行尾。在代码中,可以行使模拟按键的措施将改变selection。请看下两个函数:

HomeKey( [Unit] , [Extend] ) : 模拟按下HOME键

EndKey( [Unit] , [Extend] )   :模拟按下END键

地方的片个函数中,参数Unit有瞬间只是选值(wdUnit类型):

l  Wdline        移动及一行的启要收尾位置(缺省值)

l  WdStory      移动至文档的上马还是终止位置

l  WdColumn  移动到同排列的始发还是结位置(仅针对表格)

l  WdRow       移动到一行的发端还是结位置(仅刚刚对表)

参数Extend的只是选值(WdMovementType类型):

l  WdMove     移动selection

l  WdExtend  
扩展selection。举例说明:考虑一个场面,当前挑选了同等履,然后调用HomeKey方法,传入参数wdStory以及wdExtend,那么该行将不被含有在新selection目标吃,同样的气象而调用EndKey方法,那么该行用会晤蕴藏在新selection目标中。

 

下面的以身作则代码演示了:移动insertion
point到文档开始有,然后下EndKey方法选中整个文档:

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Position the insertion point at the beginning   
  3. // of the document.  
  4. Object unit     = Word.WdUnits.wdStory;  
  5. Object extend   = Word.WdMovementType.wdMove;  
  6. ThisApplication.Selection.HomeKey(ref unit, ref extend);  
  7.    
  8. // Select from the insertion point to the end of the document.  
  9. unit    = Word.WdUnits.wdStory;  
  10. extend  = Word.WdMovementType.wdExtend;  
  11. ThisApplication.Selection.EndKey(ref unit, ref extend);  

    // C#
    // Position the insertion point at the beginning
    // of the document.
    Object unit = Word.WdUnits.wdStory;
    Object extend = Word.WdMovementType.wdMove;
    ThisApplication.Selection.HomeKey(ref unit, ref extend);

    // Select from the insertion point to the end of the document.
    unit = Word.WdUnits.wdStory;
    extend = Word.WdMovementType.wdExtend;
    ThisApplication.Selection.EndKey(ref unit, ref extend);

 

1.2.2  Arrow Key Method

既是可以学HOME,END键,那么自然为可以套按下方向键。Word提供如下四单方法,其中Count参数代表走多少个Unit。

  • MoveLeft([Unit], [Count], [Extend])
  • MoveRight([Unit], [Count], [Extend])
  • MoveUp([Unit], [Count], [Extend])
  • MoveDown([Unit], [Count], [Extend])

里头,Extend参数使用的凡和END,HOME相同之枚举类型变量,它含有两个可选值:wdMove,wdExtend.

使倒单元(Unit)类型以及前方的悬殊,而且针对左右平移与前后运动拥有区别。

  • 左右运动时对应之单元类型  MoveLeft() MoveRight()
  • wdCharacter: 字符(缺省)
  • wdWord: 单词
  • wdCell: 单元格(仅对表)
  • wdSentence: 句子

下的代码演示了:向左移动插入点三独字符,然后选择插入点右侧边的老三单单词

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Move the insertion point left 3 characters.  
  3. Object unit = Word.WdUnits.wdCharacter;  
  4. Object count = 3;  
  5. Object extend = Word.WdMovementType.wdMove;  
  6. ThisApplication.Selection.MoveLeft(ref unit, ref count,   
  7.     ref extend);  
  8.    
  9. // Select the 3 words to the right of the insertion point.  
  10. unit = Word.WdUnits.wdWord;  
  11. count = 3;  
  12. extend = Word.WdMovementType.wdExtend;  
  13. ThisApplication.Selection.MoveRight(ref unit, ref count,   
  14.     ref extend);  

    // C#
    // Move the insertion point left 3 characters.
    Object unit = Word.WdUnits.wdCharacter;
    Object count = 3;
    Object extend = Word.WdMovementType.wdMove;
    ThisApplication.Selection.MoveLeft(ref unit, ref count,

    ref extend);
    

    // Select the 3 words to the right of the insertion point.
    unit = Word.WdUnits.wdWord;
    count = 3;
    extend = Word.WdMovementType.wdExtend;
    ThisApplication.Selection.MoveRight(ref unit, ref count,

    ref extend);
    

 

  • 上下运动时对应的单元类型 MoveUp() MoveDown()
  • wdLine            :行 (缺省)
  • wdParagraph  :段落
  • wdWindow           :窗口
  • wdScreen        :屏幕大小

脚的事例演示了动上述办法先管插入点向上移动一行,然后择下的老三个段落。

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Move the insertion point up one line.  
  3. Object unit = Word.WdUnits.wdLine;  
  4. Object count = 1;  
  5. Object extend = Word.WdMovementType.wdMove;  
  6. ThisApplication.Selection.MoveUp(ref unit, ref count, ref extend);  
  7.    
  8. // Select the following 3 paragraphs.  
  9. unit = Word.WdUnits.wdParagraph;  
  10. count = 3;  
  11. extend = Word.WdMovementType.wdMove;  
  12. ThisApplication.Selection.MoveDown(ref unit, ref count,   
  13.   ref extend);  

    // C#
    // Move the insertion point up one line.
    Object unit = Word.WdUnits.wdLine;
    Object count = 1;
    Object extend = Word.WdMovementType.wdMove;
    ThisApplication.Selection.MoveUp(ref unit, ref count, ref extend);

    // Select the following 3 paragraphs.
    unit = Word.WdUnits.wdParagraph;
    count = 3;
    extend = Word.WdMovementType.wdMove;
    ThisApplication.Selection.MoveDown(ref unit, ref count,
    ref extend);

 

3.2.3 Move Method

使Move方法将转指定的range或者selection。

脚的事例将如插入入点运动至第三单单词之前

[csharp] view
plain
copy
print?

  1.    
  2. // Use the Move method to move 3 words.  
  3. Obiect unit = Word.WdUnits.wdWord;  
  4. Object count = 3;  
  5. ThisApplication.Selection.Move(ref unit, ref count);  
// Use the Move method to move 3 words.
Obiect unit = Word.WdUnits.wdWord;
Object count = 3;
ThisApplication.Selection.Move(ref unit, ref count);

 

3.2.4  Inserting Text

不过简易的在文档中插文本的艺术是动Selection对象的TypeText方法。TypeText方法的一言一行由用户之挑控制。下面这个事例就是使用了一个叫作   
overtype
的挑三拣四项。该选项如果让辟,那么插入字符将促成插入点后面的公文为盖。


重要的例子  演示如何插入文本

(若selection类型不是insertion point或者 a block of text ,那么下面的代码do nothing)

[csharp] view
plain
copy
print?

  1. public void InsertTextAtSelection()   
  2. {  
  3.   Word.Selection sln = ThisApplication.Selection;  
  4.    
  5.   // Make sure overtype is turned off.  
  6.   ThisApplication.Options.Overtype = false;  
  7.    
  8. //当前底selection对象是否也插入点  
  9. //如果是,那么插入一截字符,然后插入段标记  
  10. if (sln.Type == Word.WdSelectionType.wdSelectionIP )   
  11. {  
  12.     sln.TypeText(“Inserting at insertion point. “);  
  13.     sln.TypeParagraph();//插入paragraph mark  
  14. }  
  15.    
  16. //selection对象是不是为normal 类型  
  17.   else if (sln.Type == Word.WdSelectionType.wdSelectionNormal )   
  18.   {  
  19.         // 查看ReplaceSelection选项是否开启  
  20. //如果打开,那么摧毁该selection,同时将selection对象修改也插入点类型//且稳定到之前的selection区域头部  
  21.         if ( ThisApplication.Options.ReplaceSelection )   
  22.         {  
  23.             Object direction = Word.WdCollapseDirection.wdCollapseStart;  
  24.             sln.Collapse(ref direction);  
  25.         }  
  26.        //插入文本和段落标记  
  27.         sln.TypeText(“Inserting before a text block. “);  
  28.         sln.TypeParagraph();  
  29.     }  
  30.     else  
  31.     {  
  32.         // Do nothing.  
  33.     }  
  34. }  
  35. ———————————————————————–  

    public void InsertTextAtSelection()
    {
    Word.Selection sln = ThisApplication.Selection;

    // Make sure overtype is turned off.
    ThisApplication.Options.Overtype = false;

    //当前底selection对象是不是为插入点
    //如果是,那么插入一段落字符,然后插入段标记
    if (sln.Type == Word.WdSelectionType.wdSelectionIP )
    {

    sln.TypeText("Inserting at insertion point. ");
    sln.TypeParagraph();//插入paragraph mark
    

    }

    //selection对象是不是为normal 类型
    else if (sln.Type == Word.WdSelectionType.wdSelectionNormal )
    {

        // 查看ReplaceSelection选项是否开启
    

    //如果翻开,那么摧毁该selection,同时用selection对象修改为插入点类型//且一贯及前面的selection区域头部

        if ( ThisApplication.Options.ReplaceSelection ) 
        {
            Object direction = Word.WdCollapseDirection.wdCollapseStart;
            sln.Collapse(ref direction);
        }
       //插入文本与段落标记
        sln.TypeText("Inserting before a text block. ");
        sln.TypeParagraph();
    }
    else
    {
        // Do nothing.
    }
    

    }

4.
The Range Object

Range对象也表示一个区域。与利用Selection相较,Range的优势在

l  执行给定任务要比少的代码

l  不需要改变目前文档的选料着区域(donot have to change the
      highlighting)

l  Has greater capabilities

 

4.1 定义并选取一个Range

 下面的代码新建一个Range对象,并精选文档的前面7独字符,包括non-printing字符,然后下Select方法是Range可见(即高亮显示)。如果非以Select方法,在Word界面中君拿看不到Range对象的区域,但是得以先后中操作。

[csharp] view
plain
copy
print?

  1. // C#  
  2. Object start = 0;  
  3. Object end = 7;  
  4. Word.Range rng = ThisDocument.Range(ref start, ref end);  
  5. rng.Select();  

    // C#
    Object start = 0;
    Object end = 7;
    Word.Range rng = ThisDocument.Range(ref start, ref end);
    rng.Select();

 

1.1.1  Counting Characters

[csharp] view
plain
copy
print?

  1. // 选择任何文档,并显示字符总数  
  2. Object start = Type.Missing;  
  3. Object end = ThisDocument.Characters.Count;  
  4.    
  5. Word.Range rng = ThisDocument.Range(ref start, ref end);  
  6. rng.Select();  
  7. MessageBox.Show(“Characters: ” +   
  8.     ThisDocument.Characters.Count.ToString());  

    // 选择一切文档,并显示字符总数
    Object start = Type.Missing;
    Object end = ThisDocument.Characters.Count;

    Word.Range rng = ThisDocument.Range(ref start, ref end);
    rng.Select();
    MessageBox.Show(“Characters: ” +

    ThisDocument.Characters.Count.ToString());
    

 

1.1.2  Setting Up Ranges

君得运用Content属性使Range包含整个文档内容

[csharp] view
plain
copy
print?

  1. // C#  
  2. Word.Range rng = ThisDocument.Content;  

    // C#
    Word.Range rng = ThisDocument.Content;

脚的事例完成以下功能:

  • 新建一个 Range变量
  • 反省文档中是不是至少含有一定量单句子
  • 假如Range的起始点为第二独词的启幕
  • 假使Range的结束点为次只词的末梢
  • 高亮显示该Range

 

[csharp] view
plain
copy
print?

  1. public void SelectSentence()   
  2. {  
  3.   Word.Range rng;  
  4.    
  5.     if (ThisDocument.Sentences.Count >= 2 )   
  6.     {  
  7.         // Supply a Start and end value for the Range.  
  8.         Object start = ThisDocument.Sentences[2].Start;  
  9.         Object end = ThisDocument.Sentences[2].End;  
  10.         rng = ThisDocument.Range(ref start, ref end);  
  11.         rng.Select();  
  12.     }  
  13. }  

    public void SelectSentence()
    {
    Word.Range rng;

    if (ThisDocument.Sentences.Count >= 2 ) 
    {
        // Supply a Start and end value for the Range.
        Object start = ThisDocument.Sentences[2].Start;
        Object end = ThisDocument.Sentences[2].End;
        rng = ThisDocument.Range(ref start, ref end);
        rng.Select();
    }
    

    }

 

4.2 扩展Range

定义Range对象后,可以行使MoveStart和MoveEnd方法扩展其的限。这片独函数使用简单个一律之参数:Unit与Count。其中Unit参数是WdUnits类型,它发生如下可选值:

  • wdCharacter
  • wdWord
  • wdSentence
  • wdParagraph
  • wdSection
  • wdStory
  • wdCell
  • wdColumn
  • wdRow
  • wdTable

脚的事例演示了:定义一个Range包含文档的先头7只字符,然后倒其初步接触7独字符长度,于是结果是原先的Range变成了一个insertion
point;然后使用MoveEnd方法要该得了点走7只字符

[csharp] view
plain
copy
print?

  1. // C#  
  2. // Define a range of 7 characters.  
  3. Object start = 0;  
  4. Object end = 7;  
  5. Word.Range rng = ThisDocument.Range(ref start, ref end);  
  6.    
  7. // Move the starting position 7 characters.  
  8. Object unit = Word.WdUnits.wdCharacter;  
  9. Object count = 7;  
  10. rng.MoveStart(ref unit, ref count);  
  11.    
  12. // Move the ending position 7 characters.  
  13. unit = Word.WdUnits.wdCharacter;  
  14. count = 7;  
  15. rng.MoveEnd(ref unit, ref count);  

    // C#
    // Define a range of 7 characters.
    Object start = 0;
    Object end = 7;
    Word.Range rng = ThisDocument.Range(ref start, ref end);

    // Move the starting position 7 characters.
    Object unit = Word.WdUnits.wdCharacter;
    Object count = 7;
    rng.MoveStart(ref unit, ref count);

    // Move the ending position 7 characters.
    unit = Word.WdUnits.wdCharacter;
    count = 7;
    rng.MoveEnd(ref unit, ref count);

下图显示了上述代码的位移过程

 

4.3 获得Range的首字符和尾字符

[csharp] view
plain
copy
print?

  1. MessageBox.Show(String.Format(“Start: {0}, End: {1}”,   
  2.     rng.Start, rng.End), “Range Start and End”);  

    MessageBox.Show(String.Format(“Start: {0}, End: {1}”,

    rng.Start, rng.End), "Range Start and End");
    

 

4.4 使用SetRange方法

[csharp] view
plain
copy
print?

  1. // C#  
  2. Word.Range rng;  
  3. Object start = 0;  
  4. Object end = 7;  
  5. rng = ThisDocument.Range(ref start, ref end);  
  6.    
  7. // Reset the existing Range.  
  8. rng.SetRange(ThisDocument.Sentences[2].Start,   
  9.     ThisDocument.Sentences[5].End);  
  10. rng.Select();  

    // C#
    Word.Range rng;
    Object start = 0;
    Object end = 7;
    rng = ThisDocument.Range(ref start, ref end);

    // Reset the existing Range.
    rng.SetRange(ThisDocument.Sentences[2].Start,

    ThisDocument.Sentences[5].End);
    

    rng.Select();

 

4.5 格式化文本

倘若使给Range指定格式,你首先用指定一个Range,然后使用格式。

下的代码演示了之类过程:

1.    选择文档中之首先段子,然后设置字号字体和对同步,

2.    弹出对话框

3.    调用三涂鸦Undo方法回退之前的操作

4.    应用Normal IndentStyle然后弹出对话框

5.    调用平等次于Undo方法然后弹出对话框

[csharp] view
plain
copy
print?

  1. // C#  
  2. public void FormatRangeAndUndo()   
  3. {  
  4.     // Set the Range to the first paragraph.  
  5.     Word.Range rng = ThisDocument.Paragraphs[1].Range;  
  6.    
  7.     // Change the formatting.  
  8.     rng.Font.Size = 14;  
  9.     rng.Font.Name = “Arial”;  
  10.     rng.ParagraphFormat.Alignment =  
  11.     Word.WdParagraphAlignment.wdAlignParagraphCenter;  
  12.     rng.Select();  
  13.     MessageBox.Show(“Formatted Range”, “FormatRangeAndUndo”);  
  14.    
  15.     // Undo the three previous actions.  
  16.     Object times = 3;  
  17.     ThisDocument.Undo(ref times);  
  18.     rng.Select();  
  19.     MessageBox.Show(“Undo 3 actions”, “FormatRangeAndUndo”);  
  20.    
  21.     // Apply the Normal Indent style.  
  22.     Object style = “Normal Indent”;  
  23.     rng.set_Style(ref style);  
  24.     rng.Select();  
  25.     MessageBox.Show(“Normal Indent style applied”,   
  26.       “FormatRangeAndUndo”);  
  27.    
  28.     // Undo a single action.  
  29.     times = 1;  
  30.     ThisDocument.Undo(ref times);  
  31.     rng.Select();  
  32.     MessageBox.Show(“Undo 1 action”, “FormatRangeAndUndo”);  
  33. }  

    // C#
    public void FormatRangeAndUndo()
    {

    // Set the Range to the first paragraph.
    Word.Range rng = ThisDocument.Paragraphs[1].Range;
    
    // Change the formatting.
    rng.Font.Size = 14;
    rng.Font.Name = "Arial";
    rng.ParagraphFormat.Alignment =
    Word.WdParagraphAlignment.wdAlignParagraphCenter;
    rng.Select();
    MessageBox.Show("Formatted Range", "FormatRangeAndUndo");
    
    // Undo the three previous actions.
    Object times = 3;
    ThisDocument.Undo(ref times);
    rng.Select();
    MessageBox.Show("Undo 3 actions", "FormatRangeAndUndo");
    
    // Apply the Normal Indent style.
    Object style = "Normal Indent";
    rng.set_Style(ref style);
    rng.Select();
    MessageBox.Show("Normal Indent style applied", 
      "FormatRangeAndUndo");
    
    // Undo a single action.
    times = 1;
    ThisDocument.Undo(ref times);
    rng.Select();
    MessageBox.Show("Undo 1 action", "FormatRangeAndUndo");
    

    }

 

4.6 插入文本

君得利用Range对象的Text属性用于向文档中插入文本。下面的代码在文档的上马处于插入
“New Text”字符串。然后择该区域。

[csharp] view
plain
copy
print?

  1. // C#  
  2. string  str = ” new Text “;  
  3. Object start = 0;  
  4. Object end = 0;  
  5. Word.Range rng = ThisDocument.Range(ref start, ref end);  
  6. rng.Text = str;  
  7. rng.Select();  

    // C#
    string str = ” new Text “;
    Object start = 0;
    Object end = 0;
    Word.Range rng = ThisDocument.Range(ref start, ref end);
    rng.Text = str;
    rng.Select();

 

4.7 替换文本

[csharp] view
plain
copy
print?

  1. // C#  
  2. start = 0;  
  3. end = 12;  
  4. rng = ThisDocument.Range(ref start, ref end);  
  5. rng.Text = str;  
  6. rng.Select();  

    // C#
    start = 0;
    end = 12;
    rng = ThisDocument.Range(ref start, ref end);
    rng.Text = str;
    rng.Select();

4.8 Collapsing a Range of
Selection

当使用Range对象要Selection对象时,有或用在平段落文字前插入文本的又还要未思量蒙原来的文件,Range对象以及Selection对象都产生Collapse方法,该方法以了个别独枚举值:

WdCollapseStart:Collapses the selection to thebeginning of itself

WdCollapseEnd:Collapsesthe selection to the end of itself

下面的例证首先创建一个Range,然后一旦其包含文档的首先段落,然后下wdCollapseStart枚举值Collapse该Range,然后插入新文本。

[csharp] view
plain
copy
print?

  1. // C#  
  2. string  str = ” new Text “;  
  3. Word.Range rng = ThisDocument.Paragraphs[1].Range;  
  4. Object direction = Word.WdCollapseDirection.wdCollapseStart;  
  5. rng.Collapse(ref direction);  
  6. rng.Text = str;  
  7. rng.Select();  

    // C#
    string str = ” new Text “;
    Word.Range rng = ThisDocument.Paragraphs[1].Range;
    Object direction = Word.WdCollapseDirection.wdCollapseStart;
    rng.Collapse(ref direction);
    rng.Text = str;
    rng.Select();

 

若使用wdCollapseEnd,即:

[csharp] view
plain
copy
print?

  1. // C#  
  2. Object direction = Word.WdCollapseDirection.wdCollapseEnd;  
  3. rng.Collapse(ref direction);  

    // C#
    Object direction = Word.WdCollapseDirection.wdCollapseEnd;
    rng.Collapse(ref direction);

结果如下:

 

Tips :
Collapse不是生好去翻译,通俗的说,它的法力是:当你的Range对象或Selection对象涵盖的始末是一致截文字时,使用Collapse()方法可使
Range或者Selection包含的区域成为原来那段文字的前插入点或者后插入点

 

4.9 Paragraph Mark 段落标记

脚的代码把文档中之先头少段落相互交换位置

重要例子

[csharp] view
plain
copy
print?

  1. public void ManipulateRangeText()   
  2. {  
  3.     // Retrieve contents of first and second paragraphs  
  4.     string  str1 = ThisDocument.Paragraphs[1].Range.Text;  
  5.     string  str2 = ThisDocument.Paragraphs[2].Range.Text;  
  6.       
  7. // 两个自然段相互交换  
  8.     Word.Range rng1 = ThisDocument.Paragraphs[1].Range;  
  9.     rng1.Text = str2;  
  10.    
  11.     Word.Range rng2 = ThisDocument.Paragraphs[2].Range;  
  12.     rng2.Text = str1;  
  13.    
  14.     // 显示结果  
  15.     rng1.Select();  
  16.     MessageBox.Show(rng1.Text, “ManipulateRangeText”);  
  17.     rng2.Select();  
  18. MessageBox.Show(rng2.Text, “ManipulateRangeText”);  
  19.     Object unit = Word.WdUnits.wdCharacter;  
  20.     Object count = -1;  
  21.     rng1.MoveEnd(ref unit, ref count);  
  22.     // Write new text for paragraph 1.  
  23. rng1.Text = “new content for paragraph 1.”;  
  24.    
  25. rng2.Text = “new content for paragraph 2.”;  
  26.     // Pause to display the results.  
  27.     rng1.Select();  
  28.     MessageBox.Show(rng1.Text, “ManipulateRangeText”);  
  29.     rng2.Select();  
  30.     MessageBox.Show(rng2.Text, “ManipulateRangeText”);  
  31.    
  32. unit = Word.WdUnits.wdCharacter;  
  33.    count = 1;  
  34.    rng1.MoveEnd(ref unit, ref count);  
  35.    // Note that in C#, you must specify   
  36.   // both parameters–it’s up to you   
  37.   // to calculate the length of the range.  
  38.   unit = Word.WdUnits.wdCharacter;  
  39.   count = rng2.Characters.Count;  
  40.   rng2.Delete(ref unit, ref count);  
  41.   // C#  
  42.   rng1.Text = str1;  
  43.   // C#  
  44.   rng1.InsertAfter(str2);  
  45.   rng1.Select();  
  46. }  

这个状态机较简单,那什么当STL中管它讲述下也?
这里我们捎用JL指令。。。我虽一直上代码了,一看便亮。但JL程序只能用来表示单步状态,遇到并行状态就处理不了了。。下次咱们之所以ST语言来叙述又复杂的状态机。。

       L     #state     //  把#state的值载入累加器
       JL    rng1      //
如果累加器的价,大于4,也就是说,跳反分支不包含下面的子,就跨反至rng1,说明出错。。

                         //  其实就长长的告句相当给 else 语句
       JU    st0    // 当累加器的值也0时, 走这个分
       JU    st1    // 当累加器的价也1时不时, 走这个分
       JU    st2    // 当累加器的价为2常, 走这个分
       JU    st3    // 当累加器的价为3时, 走这个分
       JU    st4    // 当累加器的价值吗4时, 走这个分

rng1: SET
       S     #error
       BEU

st0:  L     1                           // 这个 1 就是生只状态。
       A     #transition01         //
这个转移条件满足,状态将出于state0,转移到
state1,下面的流程类似。。。
       JC    next
       JU    ovr

st1:  L     2
       A     #transition12
       JC    next

      L     3
       A     #transition13
       JC    next
       JU    ovr

st2:  L     4
       A     #transition24
       JC    next
       JU    ovr

st3:  L     1
       A     #transition31
       JC    next
       JU    ovr

st4:  L     3
       A     #transition43
       JC    next
       JU    ovr

next: T     #state
ovr:  NOP 0

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图