Андрей Попов - Windows Script Host для Windows 2000/XP
 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);
В for (i=0;i<=PersonArr.length-1;i++) {
В PrintPerson(PersonArr[i]);
В }
}
//Функция для сортировки массива по фамилии
function SortLastName(Pers1,Pers2) {
В if (Pers1.LastName<Pers2.LastName) return -1;
В else if (Pers1.LastName==Pers2.LastName) return 0;
В else return 1;
}
//Печать содержимого файла с данными
function ListFile() {
 //Считываем данные из файла в массив
В FileToArray();
 //Печатаем информацию из массива
В ListPersonArray();
}
//Основная запускная функция
function Main() {
 //Создаем объект WshShell
В WshShell = WScript.CreateObject("WScript.Shell");
 //Определяем пути к файлам
В InitPath();
 //Создаем объект Application
В XL=WScript.CreateObject("Excel.Application");
 //Делаем окно Microsoft Excel видимым
В XL.Visible=true;
 //Открываем новую рабочую книгу
В XL.WorkBooks.Add();
 //Устанавливаем нужную ширину колонок
В XL.Columns(1).ColumnWidth = 40;
В XL.Columns(2).ColumnWidth = 40;
В XL.Columns(3).ColumnWidth = 10;
 //Печатаем заголовок таблицы
В TopReport();
 //Печатаем содержимое файла с данными
В ListFile();
 //Сохраняем созданный документ под именем out.xls
В XL.ActiveWorkbook.SaveAs(PathOut);
}
//Запускаем основную функцию
Main();
</script>
</job>
</package>
Глава 9
Рспользование РІ сценариях баз данных
РќР° практике довольно часто возникают задачи, для решения которых необходимо РёР· сценариев получать доступ Рє данным, хранящимся РІРѕ внешних базах самого различного формата (структурированные текстовые файлы, таблицы DBF Рё Paradox, базы данных Microsoft Access Рё Microsoft SQL Server Рё С‚.Рґ.). Рто довольно просто можно сделать СЃ помощью технологии Microsoft ADO (ActiveX Data Objects). Объекты ADO являются частью компонентов доступа Рє данным Microsoft (MDAC, Microsoft Data Access Components), которые поставляются, например, СЃ браузером Microsoft Internet Explorer версии 5.0 Рё выше (таким образом, РІ Windows ХРэти компоненты присутствуют изначально) или РјРѕРіСѓС‚ быть СЃРІРѕР±РѕРґРЅРѕ получены СЃ сервера Microsoft (http://msdn.microsoft.com/data/download.htm).
Мы не будем здесь останавливаться на объектной модели и принципах работы ADO (желающие подробнее разобраться с этими вопросами могут обратиться к документации MSDN), а здесь лишь разберем несколько конкретных примеров работы с таблицей самой простой структуры: DBF- формата (до появления XML формат DBF широко применялся для обмена данными между разными автоматизированными системами, да и сейчас продолжает поддерживаться многими производителями программных продуктов). Как и в предыдущих главах, здесь будут использоваться данные записной книжки (ниже мы создадим сценарий, который будет копировать в таблицу информацию из XML-файла book.xml, с которым мы работали ранее).