betway官网

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

九月 19th, 2018  |  球星丑闻

打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

相关文章

标签:,

Your Comments

近期评论

    功能


    网站地图xml地图