После того как все строки в таблице напечатаны, в файл выводится итоговая информация. Для этого мы выделяем закладку с именем "NomRec" и печатаем туда количество элементов в массиве PersonArr
:
//Выделяем закладку "NomRec"
WD.Bookmarks("NomRec").Select();
//Печатаем итоговую информацию
WA.Selection.Text=PersonArr.length;
Окончательно сформированный файл сохраняется на диске под именем out.doc:
//Сохраняем созданный документ под именем out.doc
WD.SaveAs(PathOut);
Полностью текст сценария ListWordTable.js приведен в листинге 8.2.
Листинг 8.2. Вывод данных из XML-файла в таблицу Microsoft Word
/*******************************************************************/
/* Имя: ListWordTable.js */
/* Язык: JScript */
/* Описание: Печать данных из записной книжки в таблицу */
/* Microsoft Word */
/*******************************************************************/
//Объявляем переменные
var
WshShell, //Экземпляр объекта WshShell
BasePath, //Путь к текущему каталогу
PathBook, //Путь к файлу с данными
PathOut, //Путь к выходному файлу Winword
PathTempl, //Путь к документу-шаблону
WA, //Экземпляр объекта Application
WD, //Экземпляр объекта Document
Sel, //Экземпляр объекта Selection
NomRec=0, //Счетчик количества записей
PersonRec, //Объект для хранения данных об одном человеке
PersonArr; //Массив для хранения объектов PersonRec
//Инициализируем константы Winword'а
var wdCell=12, wdAlignParagraphLeft=0, wdAlignParagraphCenter=1, wdWindowStateMaximize=1;
//Построение путей к файлам
function InitPath() {
var BasePath;
BasePath=WshShell.CurrentDirectory+"\\";
//Путь к файлу с данными
PathBook=BasePath+"book.xml",
//Путь к выходному файлу
PathOut=BasePath+"out.doc";
//Путь к документу-шаблону
PathTempl=BasePath+"table.dot";
}
//Конструктор объекта 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);
}
}
//Печать содержимого полей объекта Person
function PrintPerson(PersRec) {
//Печатаем поля текущей записи
WA.Selection.Text=PersRec.LastName;
//Переходим к следующей ячейке таблицы
WA.Selection.MoveRight(wdCell);
WA.Selection.Text=PersRec.Phone;
WA.Selection.MoveRight(wdCell);
WA.Selection.Text=PersRec.Note;
if (NomRec
//Если напечатаны еще не все записи, то нужно
//добавить в таблицу новую строку
WA.Selection.MoveRight(wdCell);
//Увеличиваем номер текущей записи
NomRec++;
}
//Сортировка массива и печать его содержимого
function ListPersonArray() {
var i;
//Сортировка массива по фамилии
Читать дальше