Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
02.01.2020
Размер:
54.78 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Лабораторная работа №7

«Операционные системы, среды и оболочки»

Выполнили:

Студентки группы ФБИ – 22

Преподаватель:

Эстрайх И.В.

Новосибирск 2014

Взаимодействие между сложными объектами Windows на VBScript/JScript

Создала с помощью программы "Блокнот" структурированный файл XML data1.xml, который содержит информацию о предметах и итоговых оценках по семестрам в каждой из изученных студентами дисциплин. Ограничилась списком студентов одной группы, занеся в файл информацию по нескольким различным предметам с разнообразным видом итоговой оценки (зачет, курсовая, экзамен и т. д.). Создала сценарий script1.vbs, выполняющий чтение из XML-файла data1.xml информации о студентах и организовывающий ее вывод в программу WORD. Предварительно создала шаблон документа, содержащий шапку и таблицу.

В итоге получаем скрипт script1.vbs следующего содержания:

Dim WSS, RootPath, DocXML, root, ObjWord, DocWord, ObjDocs, Sel, node, I

Set WSS = WScript.CreateObject("WScript.Shell")

RootPath = WSS.CurrentDirectory

REM Создаём объект XML документа.

Set DocXML = WScript.CreateObject ("Msxml.DOMDocument")

REM Загружаем его.

Tr = DocXML.load(RootPath + "\data1.xml")

If (Tr = False) then

WScript.Echo "Ошибка загрузи XML документа!"

WScript.Quit

End if

' Создаём объект MS Word.

Set ObjWord = WScript.CreateObject("Word.Application")

Set ObjDocs = ObjWord.Documents

Set DocWord = ObjDocs.Open(RootPath + "\doc.docx")

Set Sel = ObjWord.Selection

ObjWord.Visible = true

set root = DocXML.documentElement / обращаемся к эелементу

DocWord.Bookmarks("bkm2").Select()

I = 1

For Each node In root.childNodes

Sel.TypeText(cStr(I))

Sel.MoveRight(12)

Sel.TypeText(GetTagVal(node, "ФИО"))

Sel.MoveRight(12)

Sel.TypeText(GetTagVal(node, "Номер_зачетки"))

Sel.MoveRight(12)

' Пишем количество предметов.

Dim val

set val = node.getElementsByTagName("Предмет")

Sel.TypeText(cStr(val.length))

If (I <> root.childNodes.length) then ' Проверяем, чтобы не создавал пустую строку на последней итерации цикла.

Sel.MoveRight(12)

End If

I = I + 1

Next

DocWord.SaveAs(RootPath + "\fbi21.docx")

' Получение значение из тега в указанном узле.

Function GetTagVal(tagNode, tagName)

Dim Value

If tagNode.nodeName=root.nodeName Then

Set Value = root.getElementsByTagName(tagName)

Else

Set Value = tagNode.SelectNodes(tagName)

End If

If Value.length>0 Then

GetTagVal = Value.item(0).text

Else

GetTagVal = ""

End If

End Function

Создала сценарий script2.vbs, выполняющий чтение из XML-файла data1.xml информации о студентах, и организовывающий ее вывод в программу EXCEL. Данные, которые необходимо отразить в рабочей книге, должны отражать зачетные (с зачетом и без экзамена) дисциплины и количество студентов получивших по ним зачет, а также экзаменационные предметы (с зачетами, курсовыми и прочими отметками) с указанием среднего балла за экзамен среди всех студентов, его сдававших. Привела полный текст скрипта script2.vbs:

Dim WSS, RootPath, DocXML, root, ObjExcel, DocExcel, ObjWB, Sel, node, I

Set WSS = WScript.CreateObject("WScript.Shell")

RootPath = WSS.CurrentDirectory //указываем текущую директорию

' Создаём объект XML документа.

Set DocXML = WScript.CreateObject ("Msxml.DOMDocument")

' Загружаем его.

Tr = DocXML.load(RootPath + "\data1.xml")

If (Tr = False) then

WScript.Echo "Ошибка загрузи XML документа!"

WScript.Quit

End if

' Создаём объект MS Excel.

Set ObjExcel = WScript.CreateObject("Excel.Application")

Set ObjWB = ObjExcel.WorkBooks

Set DocExcel = ObjWB.Add(RootPath + "\doc.xlsx")

ObjExcel.Visible = true

set root = DocXML.documentElement

Dim CountMath, CountEcon, SumInf, NInf, SumOS, NOS

I = 0

For each node In root.childNodes // обращение к отдельному элементу

Dim val

set val = node.getElementsByTagName("Предмет")

For I = 0 to val.length - 1

' Смотрим зачётные.

If GetTagVal(val.item(I), "Название") = "Экономика" then

If val.item(I).getElementsByTagName("Зачет").item(0).text = "зачтено" then

CountEcon = CountEcon + 1

End If

End If

If GetTagVal(val.item(I), "Название") = "Математика" then

If val.item(I).getElementsByTagName("Зачет").item(0).text = "зачтено" then

CountMath = CountMath + 1

End If

End If

' Смотрим экзаменационные.

If GetTagVal(val.item(I), "Название") = "Информатика" then

NInf = NInf + 1

SumInf = SumInf + cInt(val.item(I).getElementsByTagName("Экзамен").item(0).text)

End If

If GetTagVal(val.item(I), "Название") = "ОССиО" then

NOS = NOS + 1

SumOS = SumOS + cInt(val.item(I).getElementsByTagName("Экзамен").item(0).text)

End If

Next

Next

' Зачётные.

ObjExcel.Cells(2,1).Value = "Экономика"

ObjExcel.Cells(2,2).Value = CountEcon

ObjExcel.Cells(3,1).Value = "Математика"

ObjExcel.Cells(3,2).Value = CountMath

' Экзаменационные.

ObjExcel.Cells(2,3).Value = "Информатика"

ObjExcel.Cells(2,4).Value = SumInf/NInf

ObjExcel.Cells(3,3).Value = "ОССиО"

ObjExcel.Cells(3,4).Value = SumOS/NOS

ObjExcel.ActiveWorkBook.SaveAs(RootPath + "\fbi21.xlsx")

' Получение значение из тега в указанном узле.

Function GetTagVal(tagNode, tagName)

Dim Value

If tagNode.nodeName=root.nodeName Then

Set Value = root.getElementsByTagName(tagName)

Else

Set Value = tagNode.SelectNodes(tagName)

End If

If Value.length>0 Then

GetTagVal = Value.item(0).text

Else

GetTagVal = ""

End If

End Function

Вывод:

Таким образом, я изучила приемы работы со сложными объектами Windows на VBScript/JScript.

Соседние файлы в папке Операционные системы