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

搞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

相关文章

Leave a Comment.