Министерство образования и науки РФ
Новосибирский государственный технический университет
Факультет бизнеса
Кафедра экономической информатики
Лабораторная работа №7 по операционным системам
Взаимодействие между сложными объектами Windows на VBScript/JScript
Студенты:
Группа: ФБИ-22
Преподаватель: Эстрайх И. В.
Дата: 14.06.2014
Новосибирск 2014
Цель работы: научиться организовывать взаимодействие между сложными объектами Windows (в частности, научиться обрабатывать документ XML с помощью MO Word и MO Excel).
Ход работы:
-
В папке C:\LR7 создали документ data1.xml со следующими данными (представлены для удобства в таблице 1).
Таблица 1 — Группа ХХХ-12
ФИО |
№ зачётки |
ВССиТ |
Информатика |
ИС |
ИО |
ОС |
Борзых |
12345 |
4 семестр: КП 3 экзамен 3 |
3 семестр: КП 3 экзамен 4 |
3 семестр: РГР 5 зачёт: зачтено 4 семестр: экзамен 4 |
5 семестр: зачёт: зачтено |
5 семестр: РГР 3 зачёт: не зачтено |
Булгакова |
12346 |
4 семестр: КП 5 экзамен 5 |
— |
3 семестр: РГР 5 зачёт: зачтено 4 семестр: экзамен 5 |
5 семестр: зачёт: зачтено |
5 семестр: РГР 5 зачёт: зачтено |
Гаврилов |
12347 |
4 семестр: КП 4 экзамен 4 |
3 семестр: КП 4 экзамен 5 |
3 семестр: РГР 4 зачёт: зачтено 4 семестр: экзамен 5 |
5 семестр: зачёт: не зачтено |
5 семестр: РГР 3 зачёт: не зачтено |
Королькова |
12348 |
4 семестр: КП 4 экзамен 3 |
3 семестр: КП 5 экзамен 4 |
3 семестр: РГР 4 зачёт: зачтено 4 семестр: экзамен 4 |
— |
— |
Соболев |
12349 |
4 семестр: КП 5 экзамен 4 |
3 семестр: КП 4 экзамен 3 |
3 семестр: РГР 4 зачёт: зачтено 4 семестр: экзамен 4 |
5 семестр: зачёт: зачтено |
5 семестр: РГР 5 зачёт: зачтено |
Структура документа xml:
<УспеваемостьСтудентов>
<Группа>
<НазваниеГруппы>ХХХ-12</НазваниеГруппы>
<Студент>
<ФИО>Соболев</ФИО>
<НомерЗачётки>12349</НомерЗачётки>
<Предмет>
<НазваниеПредмета>ВССиТ</НазваниеПредмета>
<Семестр>4
<КП>5</КП>
<Экзамен>4</Экзамен>
</Семестр>
</Предмет>
<Предмет>
<НазваниеПредмета>Информатика</НазваниеПредмета>
<Семестр>3
<КП>4</КП>
<Экзамен>3</Экзамен>
</Семестр>
</Предмет>
<Предмет>
<НазваниеПредмета>ИС</НазваниеПредмета>
<Семестр>3
<РГР>4</РГР>
<Зачёт>зачтено</Зачёт>
</Семестр>
<Семестр>4
<Экзамен>4</Экзамен>
</Семестр>
</Предмет>
<Предмет>
<НазваниеПредмета>ИО</НазваниеПредмета>
<Семестр>5
<Зачёт>зачтено</Зачёт>
</Семестр>
</Предмет>
<Предмет>
<НазваниеПредмета>ОС</НазваниеПредмета>
<Семестр>5
<РГР>5</РГР>
<Зачёт>зачтено</Зачёт>
</Семестр>
</Предмет>
</Студент>
<Студент>
….
</Студент>
</Группа>
</УспеваемостьСтудентов>
-
В папке C:\LR7 создали шаблон MO Word Doc1.dotx (его содержимое представлено на рисунке 1).
Рисунок 1 — Шаблон Doc1.dotx
На рисунке 2 представлено состояние папки для сохранения документов до выполнения скриптов.
Рисунок 2 — Начальное состояние папки
-
Создали скрипт script1.vbs, считывающий информацию об успеваемости студентов группы из data1.xml, заносящий её в Doc1.dotx и сохраняющий последний документ под именем «Название группы.doc» в каталоге, из которого запущен скрипт. Заносить необходимо следующую информацию: № студента, ФИО, № зачётки, количество изученных студентом дисциплин.
На рисунке 3 представлено содержимое папки после выполнения script1.vbs
Рисунок 3 — Папка после выполнения script1.vbs
На рисунке 4 представлено содержимое заполняемого скриптом документа.
Рисунок 4 — Результат работы script1.vbs
Текст script1.Vbs:
Function GetTagVal(tagNode, tagName)
Dim Value
Set Value=tagNode.getElementsByTagName(tagName)
If Value.length>0 Then
GetTagVal=Value.item(0).text
Else GetTagVal=""
End If
End Function
REM------------------------------------------
Dim docXML, root, objWord, WD, sel, group, objArgs, i, student, l, predmet, groupStud, dicZachet
Set docXML=WScript.CreateObject("Microsoft.XMLDOM")
REM-----------------------------------Подаётся один аргумент -- путь к xml-документу
Set objArgs=WScript.Arguments
REM-----------------------------------Если документ по пути в аргументе не загрузился
If NOT(docXML.load(objArgs(0))) Then
WScript.Echo "Ошибка при загрузке списка студентов xml"
WScript.Quit
End If
REM--------------------------------------Корневой узел документа xml(УспеваемостьСтудентов)
Set root=docXML.documentElement
REM--------------------------------------Узел "Группа" (единственный для документа)
Set group=root.childnodes.item(0)
Set objWord=WScript.CreateObject("Word.Application")
Set WD=objWord.Documents.Open("C:\LR7\Doc1.dotx")
objWord.Visible=true
REM-----------------------Текущая позиция курсора в документе
Set sel=objWord.Selection
REM--------------------------------------Переход на закладку "Группа"
WD.Bookmarks("Группа").Select()
REM--------------------------------------Внесение названия группы (узел 0)
sel.TypeText group.childnodes.item(0).text
REM--------------------------------------Переход на закладку "Начало" (первая ячейка таблицы)
WD.Bookmarks("Начало").Select()
REM----------------------------------------------Коллекция дочерних узлов "Студент" (узлы 1-...)
Set groupStud=group.GetElementsByTagName("Студент")
i=1
While i<>groupStud.length+1
sel.TypeText CStr(i)
sel.MoveRight 12
Set student=group.childnodes.item(i)
sel.TypeText GetTagVal(student, "ФИО")
sel.MoveRight 12
sel.TypeText GetTagVal(student, "НомерЗачётки")
sel.MoveRight 12
Set predmet=student.getElementsByTagName("Предмет")
REM--------------------------------------Число предметов студента
l=predmet.length
sel.TypeText CStr(l)
i=i+1
REM--------------------------------------Чтобы не добавлялась лишняя строка,
REM-----------------------------------------------------если студент последний
if i<>groupStud.length+1 Then sel.MoveRight 12
WEnd
WD.SaveAs("C:\LR7\"&group.childnodes.item(0).text&".doc")
WD.Close