Лабораторно упражнение № 3
Разработка на приложение, използващо функционалните възможности на Word
ЛАБОРАТОРНО УПРАЖНЕНИЕ № 3
РАЗРАБОТКА НА ПРИЛОЖЕНИЕ, ИЗПОЛЗВАЩО ФУНКЦИОНАЛНИТЕ ВЪЗМОЖНОСТИ НА MS WORD
1. Въведение.
В състава на MS Office се намира специализирана програмна система за обработка на текстове MS Word. Това е сложна система от колекции и обекти с изключително разнообразни методи и свойства. MS Word може да се използва самостоятелно, да се разширяват неговите функции посредством VBA или да се проектират програми, използващи неговите функционални възможности.
Основно, MS Word се състои от обекта Application, представляващ неговото конкретно приложение, Options предоставящ достъп до параметрите на MS Word, Browser - преместване на документи и множество колекции с различно предназначение.
Основната колекция в MS Word е Documents, състояща се от обекти Document. Методите на колекцията позволяват създаване Add, отваряне Open, закриване Close и съхраняване Save на документи. Обектът Document представлява конкретен документ в колекцията, притежаващ свойства и методи. По-важните от тях са CheckGrammar, CheckSpelling, PrintPreview, Redo, Save, SaveAs, Undo, UpdateStyle и др.
Колекцията Paragraphs е съставена от обекти Paragraph и поддържа два метода Add и Reset.
MS Word притежава колекции и обекти за работа с таблици, за работа с текст, обектите Range за достъп до определени символи от текста и Selection за работа с избрана част от текста и т.н. Допълнително колекцията Windows е предназначена за управление на визуалната част с методи Add , за аранжиране на формите и т.н.
2. Цел на лабораторното упражнение.
Основната цел на лабораторното упражнение е проектиране, разработване и изпълнение на програма, съставена на VB.NET и работеща съвместно с MS Word. Като допълнителни задачи са определени:
-
въвеждане на текстова информация от външен файл и съставяне на текстово меню съответствуващо на приетите синтактични конструкции във файла,
-
проектиране на събитийни процедури за обработка на позициите от главното меню и от неговите подменюта,
-
въвеждане на информация в главната форма на приложението и нейното вмъкване (заместване) на предварително определени места в текстовия файл поддържан от MS Word,
-
създаване на референция към COM – обекти (MS Word )и използване на техните функционални възможности.
Поради изключително голямото разнообразие от колекции, обекти, методи и свойства включени в състава на MS Word не е възможно тяхно цялостно включване в упражнението.
3. Задание за лабораторно упражнение.
Да се разработи програмна система за поддържане и обработка на набор от документи по образец. В заданието влиза формиране на директория, включваща зададени текстови файлове, представляващи образци на документи. Последните са класифицирани по предназначение и вид. Всеки образец на документ има уникално име, което предварително е известно.
В заданието на разработваната система е включено изискването състава на главното меню да се въвежда и определя от външен файл, записан в Unicode (виж приложението към упражнението и фиг.3.1) при следните условия:
Фиг.3.1
Вид на формата след стартиране на програмата
- наименованията на позициите от основното меню са на български език и задължително започват с главна буква. Това в конкретния пример се използва като идентификатор за определяне местоположението на текста,
- наименованията на позициите от падащите менюта са на български език и започват с малка буква,
- след всеки текст от основното меню следват текстовете от неговото падащо меню.
- всяка позиция предизвиква намирането и отварянето на определен текстов файл – образец. Това позволява да се коригира образеца или посредством Save As да се създаде конкретно негово копие
- след наименованието на позицията е поставен разделител “|” и след това е записано името на файла – образец.
При разработката на проекта в основната форма менюто не се поставя като обект, а се генерира при изпълнение.
За изпълнението на заданието е необходимо следното:
-
Отваря се ново приложение на VB.NET с една единствена форма. Препоръчително е да се постави подходяща икона. Да се отстранят управляващите бутони за минимизиране и максимизиране на формата. Надписът да бъде “Програмна система за документооборот”.
-
Създава се референция към библиотеката на MS Word. От главното меню на средата за развитие се избира Project | Add Reference. От отворената диалогова форма се избира СОМ страницата и съответно обектната библиотека Microsoft Word 10.0 Object Library или следваща по-висока версия.
-
В класа, определен от основната форма се обявява следното:
Public MyWord As Word.Application
Public MyDocument As Word.Document
Public TabMenu(100, 1) As String
Public TabMenuEnd As Integer
Public MyPath As String
Public DocName As String
Public TextLine As String
където TabMenu е двуколонен масив. При изпълнение в първата колона се зарежда от външен файл текста на позиция от менюто, а във втората – наименованието на файла, съдържащ образец на съответния текстов документ. TabMenuEnd - броя на всички позиции от менюто. Това ограничава диапазона на проверките. MyPath – стрингова променлива, която показва примерен път до файловете – образци. Препоръчително е да се работи с текущата директория, определена при инсталиране на приложението. TextLine - стринг използван при четене от външен файл.
-
При зареждането на приложение се определя местоположението и ширината на основната форма
Me.Left = 0
Me.Top = 0
Me.Width = Screen.PrimaryScreen.Bounds.Width
Така определената ширина зависи от използвания монитор и се адаптира към него.
-
Създава се приложение с наименование MyWord
MyWord = CreateObject ("Word.Application")
-
Обявяват се необходимите променливи и обекти
Dim mainMenu1 As New MainMenu
Dim MenuItem As System.Windows.Forms.MenuItem
Dim subMenuItem As MenuItem
Dim i As Integer = 0
Dim k As Integer = 1
Dim PosIndex As Integer
Dim B As String
Dim inputText As TextReader = File.OpenText(MyPath + "MENUTEXT.txt")
където, освен компонентите на менюто, PosIndex ще определя местоположението на специалния разделител “|” между текста на позицията от менюто и името на съответния файл – образец. B – помощна променлива, приемаща първата буква (главна или малка) за определяне на позиция от основно или падащо подменю. inputText е от типа на TextReader, разгледан в предното упражнение.
-
Останалата част от процедурата е за зареждане на формата и съдържа:
TextLine = inputText.ReadLine()
While Not (TextLine Is Nothing)
If TextLine.Trim <> "" Then
B = TextLine.Substring(0, 1)
Select Case B
Case "А" To "Я" ' главно меню
MenuItem = New System.Windows.Forms.MenuItem
mainMenu1.MenuItems.Add(MenuItem)
MenuItem.Text = TextLine
If TextLine.IndexOf("|") > 0 Then
MenuItem.Text = TextLine.Substring(0, TextLine.IndexOf("|"))
TabMenu(k, 0) = MenuItem.Text
TabMenu(k, 1) = TextLine.Substring(TextLine.IndexOf("|") + 1)
subMenuItem.Index = 0
k = k + 1
Else
MenuItem.Text = TextLine
End If
MenuItem.Index = i : i = i + 1
AddHandler MenuItem.Click, AddressOf TopMenuItem_Click
Case Else ' подменю
subMenuItem = New System.Windows.Forms.MenuItem
If TextLine.IndexOf("|") > 0 Then
subMenuItem.Text = TextLine.Substring(0, TextLine.IndexOf("|"))
TabMenu(k, 0) = subMenuItem.Text
TabMenu(k, 1) = TextLine.Substring(TextLine.IndexOf("|") + 1)
k = k + 1
End If
subMenuItem.Index = 0
MenuItem.MenuItems.Add(subMenuItem)
AddHandler subMenuItem.Click, AddressOf MenuItem_Click
End Select
End If
TextLine = inputText.ReadLine()
End While
inputText.Close()
Me.Menu = mainMenu1
TabMenuEnd = k – 1
където основните конструкции включват:
-
прочитане на първата линия от външния файл,
-
организиране на цикъл до достигане на празна линия. Може да се организира и друг начин за следене и достигане края на файла.
-
определяне на първата буква и разпределяне за основно меню или подменю
-
и в двата случая се определя позицията на специално избрания разделител “|” . Първият подстринг се приема за текст на позицията, а втория за наименование на съответния файл – образец. Т.к. конструкцията се повтаря два пъти, може да се оформи като самостоятелна процедура.
-
Отделените стрингове се записват в масива TabMenu
При активиране на позиция от основното меню, която няма подменю се изпълнява процедурата TopMenuItem_Click, в противен случай MenuItem_Click
-
Програмният текст на процедурата TopMenuItem_Click е следния:
Public Sub TopMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
'-процедура обработваща главното меню
Dim x As Integer
Dim SubMenuItem As New System.Windows.Forms.MenuItem
SubMenuItem = CType(sender, MenuItem)
Dim str As String
str = SubMenuItem.Text
If str = "КРАЙ" Then
Try : MyWord = Nothing
Catch ex As Exception : MsgBox(ex.ToString)
Finally : Me.Close() : End
End Try
End If
Dim i As Integer
For i = 0 To TabMenuEnd
If TabMenu(i, 0) = SubMenuItem.Text Then
x = MsgBox("Създаване на текстов документ по образец?", 36, SubMenuItem.Text)
If x = 7 Then Exit Sub
DocName = ""
For x = 0 To TabMenuEnd
If TabMenu(x, 0) = SubMenuItem.Text Then
DocName = TabMenu(x, 1) + ".Doc"
End If
Next
If DocName.Trim <> "" Then
If File.Exists(MyPath + DocName) = False Then Exit Sub
MyWord = CreateObject("Word.Application")
MyWord.Top = 0
MyWord.Width = Screen.PrimaryScreen.Bounds.Width
MyWord.Height = Screen.PrimaryScreen.Bounds.Height - Me.Height
MyWord.Caption = SubMenuItem.Text
MyWord.Documents.Open(MyPath & DocName, ReadOnly:=True)
'===========================================
FillingWord(MyWord, "/@Име", TextBox1.Text)
FillingWord(MyWord, "/@Държава", ComboBox1.Text)
MyWord.Visible = True
'===========================================
End If
End If
Next
End Sub
където ключовата дума "КРАЙ" се различава по изпълнение от останалите думи в менюто. Нейната идентификация е свързана с прекратяване изпълнението на приложението. В примера не са показани възможностите на метода Quit за записване на отворени документи, за организиране на диалог в подобни случай и т.н.
SubMenuItem.Text съхранява текста на избраната позиция от менюто. Организира се цикъл за откриване му в TabMenu и съответно се определя името на файла – образец. Същият се комплектова с пътя и стринга “.Doc”.
След организиран диалог и проверка за наличност на файла се отваря документа. Образецът може да се редактира или след попълване да се запише под ново име.
-
Процедурата FillingWord намира в текстовия файл – образец кодираната дума и я замества с тази въведена от главната форма на приложението (Фиг.3.2.).
Фиг.3.2.
Допълнение към главната форма на приложението
Примерният текст на процедурата е следния:
Function FillingWord(ByVal MyWord As Word.Application, ByVal ReplaceText As String, ByVal ReplaceWith As String)
'-процедура за заместване на текст
Dim i As Integer
Try
i = MyWord.Documents.Count
Dim ActiveDocument As Word.Document = MyWord.Documents(i)
ActiveDocument.Activate()
With ActiveDocument.Range.Find
.ClearFormatting()
.Text = ReplaceText
.Replacement.ClearFormatting()
.Replacement.Text = ReplaceWith
.Execute(Replace:=Word.WdReplace.wdReplaceAll, forward:=True, Wrap:=Word.WdFindWrap.wdFindContinue)
End With
Catch ex As Exception
End Try
End Function
-
По аналогичен начин е организирана процедурата за обработка на позициите от падащо меню. В следващия програмен текст са показани новите възможности за организиране на диалогова форма в стила на изискванията на VB.NET
Dim Message As String = "Желаете ли създаване на текстов документ по образец?”
Dim Caption As String = topMenuItem.Text + " " + SubMenuItem.Text
Dim Buttons As Integer = MessageBoxButtons.YesNo
Dim Result As DialogResult
Result = MessageBox.Show (Me, Message, Caption,
MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign)
If Result = DialogResult.No Then Exit Sub
-
При визуализацията на MS Word е възможно да се управляват неговите размери и местоположение, например
MyWord.Top = Me.Height
MyWord.Width = Screen.PrimaryScreen.Bounds.Width
MyWord.Height = Screen.PrimaryScreen.Bounds.Height - Me.Height
Конкретните стойности зависят и от мерните единици на екрана, формата и т.н.
-
Задания за самостоятелна разработка.
Така проектираната система обхваща само някои най-общи функции и възможности на MS Word. Допълнително може да бъде разработено следното:
-
При откриването на файл – образец, същият да се копира като документ с уникално име, определяно от приложението автоматично. За целта да се организира брояч, който променя стойността си при всеки записан нов документ. Между сесиите стойността на брояча да се съхранява по подходящ начин във външен файл. Като пример, името на новия файл се образува от името на файла – образец и текущата стойност на брояча.
-
Документите в приложението са свързани с име на конкретен студент. За целта да се разширят възможностите на приложението, като към формата се добави полета за въвеждане на личните данни, статута на студента (курс, група, факултетен номер, специалност и пр.) и друга информация, необходима при попълването на документите.
-
Създаденият нов документ да се свърже с името на студента като отделен файл или да се използва възможността предоставена от Windows за автор на файла.
-
Да се добави нова уникално разпознаваема позиция “СПРАВКИ” , аналогична на “КРАЙ”. При активирането й да се визуализира нова форма, съдържаща същото меню с тази разлика, че при активиране на позиция се визуализират всички файлове (документи) създадени от избрания образец.
-
Аналогично, при въвеждане име на студент да се изработи справка с всички документи, съдържащи неговото име.
-
Препоръчително е при прекратяване работата с приложението да се прави проверка за наличност на отворени документи и същите да се запишат при направени промени, с или без диалог.
-
Да се програмира възможността за отваряне на няколко документа и съответно да се осигури тяхното аранжиране при визуализация.
-
При отворен документ да се програмира граматическа проверка на избран текст, параграф или на целия текст.
-
Да се програмира прехвърляне на селектиран текст или параграф от един отворен документ на друг.
-
На основание методически съображения в примерното задание са използвани външни файлове. Да се разработи програмната система за управление на документооборота, посредством използване база от данни.
-
Приложение.
Примерно съдържание на файла MENUTEXT.TXT записан в Unicode. С главни букви са позициите от основното меню, а с малки – на съответствуващото му подменю. След разделителния знак е записано името на файла - образец. Файловете задължително трябва да се намират в определената за целта директория.
МОЛБА
за уверение|obrDOC11
за прекъсване по семейни причини|obrDOC12
за прекъсване по слаб успех|obrDOC13
за удължаване на сесия|obrDOC14
за записване|obrDOC15
УДОСТОВЕРЕНИЕ|obrDOC2
УВЕРЕНИЕ|obrDOC3
ДОКЛАД
за отстраняване по финансови причини|obrDOC41
за отстраняване поради слаб успех|obrDOC42
за прекъсване по семейни причини|obrDOC43
ЗАПОВЕД
за отстраняване по слаб успех|obrDOC51
за прекъсване по семейни причини|obrDOC52
за записване|obrDOC53
за отписване|obrDOC54
за анулиране на заповед|obrDOC55
КРАЙ
Сподели с приятели: |