Выбрать главу

 XL.Cells(NomRec+1,3).Value=PersRec.Phone;

}

Полностью текст сценария ListXLS.wsf приведен в листинге 8.3.

Листинг 8.3. Вывод данных из XML-файла в таблицу Microsoft Excel

<package>

<job id="list_xl">

<runtime>

<description>

Имя: ListXLS.wsf

Описание: Печать данных из записной книжки в Microsoft Excel

</description>

</runtime>

<reference object="Excel.Sheet"/>

<script language="JScript">

var

 WshShell,  //Экземпляр объекта WshShell

 BasePath,  //Путь к текущему каталогу

 PathBook,  //Путь к файлу с данными

 PathOut,   //Путь к выходному файлу Winword

 XL,        //Экземпляр объекта Application

 NomRec=0,  //Счетчик количества записей

 PersonRec, //Объект для хранения данных об одном человеке

 PersonArr; //Массив для хранения объектов PersonRec

//Построение путей к файлам

function InitPath() {

 var BasePath;

 BasePath=WshShell.CurrentDirectory+"\\";

 //Путь к файлу с данными

 PathBook=BasePath+"book.xml",

 //Путь к выходному файлу

 PathOut=BasePath+"out.xml";

}

//Конструктор объекта Person

function Person(LastName,Name,Phone,Street,House,App,Note) {

 this.LastName=LastName; //Фамилия

 this.Name=Name;         //Имя

 this.Phone=Phone;       //Телефон

 this.Street=Street;     //Улица

 this.House=House;       //Дом

 this.App=App;           //Квартира

 this.Note=Note;         //Примечание

}

//Определение значения тега tgName XML-элемента obj

function GetTagVal(obj, tgName) {

 var ElemList;

 //Создаем коллекцию дочерних для obj элементов, которые

 //задаются тегом tgName

 ElemList=obj.getElementsByTagName(tgName);

 //Проверяем, есть ли в коллекции ElemList элементы

 if (ElemList.length>0)

  //Возвращаем значение тега tgName

  return ElemList.item(0).text

 else return "";

}

//Заполнение нового элемента массива

function PersonToArray(XNode) {

 //Создаем новый экземпляр PersonRec объекта Person

 PersonRec=new Person();

 //Заполняем поля объекта PersonRec

 PersonRec.LastName=GetTagVal(XNode,"LastName");

 PersonRec.Name=GetTagVal(XNode,"Name");

 PersonRec.Phone=GetTagVal(XNode,"Phone");

 PersonRec.Street=GetTagVal(XNode,"Street");

 PersonRec.House=GetTagVal(XNode,"House");

 PersonRec.App=GetTagVal(XNode,"App");

 PersonRec.Note=GetTagVal(XNode,"Note");

 //Сохраняем объект PersonRec в массиве

 PersonArr[PersonArr.length]=PersonRec;

}

//Создание массива объектов Person

function FileToArray() {

 var XML,Root,NomRec,CurrNode,i;

 //Создаем массив PersonArr

 PersonArr=new Array();

 //Создаем объект XML DOM

 XML = WScript.CreateObject("Msxml.DOMDocument");

 //Загружаем XML-документ из файла

 XML.load(PathBook);

 //Сохраняем в переменной Root ссылку на корневой элемент документа

 Root=XML.documentElement;

 //Перебираем все дочерние элементы первого уровня вложенности

 //для корневого элемента

 for (i=1; i<=Root.childNodes.length-1;i++) {

  //Выделяем в коллекции XML-элементов i-й элемент

  CurrNode=Root.childNodes.item(i);

  //Добавляем новый элемент в массив объектов Person

  PersonToArray(CurrNode);

 }

}

//Вывод заголовка отчета

function TopReport() {

  //Печатаем в ячейки текст

 XL.Cells(1,1).Value="Фамилия";

 XL.Cells(1,2).Value="Имя";

 XL.Cells(1,3).Value="Телефон";

 //Выделяем три ячейки

 XL.Range("A1:C1").Select();

 //Устанавливаем полужирный текст для выделенного диапазона

 XL.Selection.Font.Bold = true;

 //Устанавливаем выравнивание по центру для выделенного диапазона

 XL.Selection.HorizontalAlignment=xlCenter;

}

//Печать содержимого полей объекта Person

function PrintPerson(PersRec) {

 //Увеличиваем счетчик количества записей

 NomRec++;

 //В первом столбце печатаем фамилию

 XL.Cells(NomRec+1,1).Value=PersRec.LastName;

 //Во втором столбце печатаем имя

 XL.Cells(NomRec+1,2).Value=PersRec.Name;

 //В третьем столбце печатаем телефон

 XL.Cells(NomRec+1,3).Value=PersRec.Phone;

}

//Сортировка массива и печать его содержимого

function ListPersonArray() {

 var i;

 //Сортировка массива по фамилии

 PersonArr.sort(SortLastName);