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

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

function ListPersonArray() {

 var i;

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

 PersonArr.sort(SortLastName);

 //Переходим к закладке TableStart

 WD.Bookmarks("TableStart").Select();

 //Цикл по всем элементам массива PersonArr

 for (i=0;i<=PersonArr.length-1;i++) {

  //Печать информации для текущей записи

  PrintPerson(PersonArr[i]);

 }

}

Как мы видим, сначала в этой функции в семействе Bookmarks находится закладка с именем "TableStart" и с помощью метода Select() происходит выделение этой закладки в документе. Затем в цикле for вызывается функция PrintPerson(PersReс) для каждого элемента массива PersonArr; в этой функции содержимое полей объекта PersRec последовательно печатается в ячейки таблицы:

//Печать содержимого полей объекта 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<PersonArr.length-1)

  //Если напечатаны еще не все записи, то нужно

  //добавить в таблицу новую строку

  WA.Selection.MoveRight(wdCell);

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

 NomRec++;

}

Итак, печать в таблице происходит следующим образом: после вывода текста в текущую ячейку мы перемещаемся в соседнюю ячейку справа (константа wdCell проинициализирована в самом начале сценария, wdCell=12):

WA.Selection.MoveRight(wdCell);

Если при этом текущая ячейка находилась в третьем столбце, то после такого перемещения в таблицу автоматически будет добавлена новая строка.

После того как все строки в таблице напечатаны, в файл выводится итоговая информация. Для этого мы выделяем закладку с именем "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) {