Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
<reference object="Excel.Sheet"/>
Основная функция сценария Main() как всегда начинается с создания объекта WshShell и вызова функции InitPath(), в которой определяется путь к файлу с данными book.xls и выходному файлу out.xls:
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
//Определяем пути к файлам
InitPath();
Для того чтобы запустить Excel и получить доступ к его интерфейсам, нужно создать экземпляр объекта Excel.Application (переменная XL):
//Создаем объект Application
XL=WScript.CreateObject("Excel.Application");
Чтобы визуально контролировать процесс вывода информации, окно Excel мы сделаем видимым:
//Делаем окно Microsoft Excel видимым
XL.Visible=true;
Для создания в Excel нового файла (рабочей книги) используется метод Add() семейства Workbooks:
//Открываем новую рабочую книгу
XL.WorkBooks.Add();
Затем в сценарии выставляется необходимая ширина трех первых колонок (здесь мы будем печатать имя, фамилию и номер телефона). Для этого следует присвоить нужные значения свойству ColumnWidth соответствующих элементов коллекции Columns:
//Устанавливаем нужную ширину колонок
XL.Columns(1).ColumnWidth = 40;
XL.Columns(2).ColumnWidth = 40;
XL.Columns(3).ColumnWidth = 10;
Заголовок отчета (названия столбцов) печатается в функции TopReport():
//Вывод заголовка отчета
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;
}
Как мы видим, доступ к ячейке можно получить с помощью свойства Сells объекта Application, указав в круглых скобках индексы строки и столбца, на пересечении которых находится данная ячейка (нумерация строк и столбцов начинается с единицы). Свойство Value соответствует содержимому ячейки.
Так как названия столбцов должны быть выделены полужирным шрифтом и выровнены по центру, мы в функции TopReport() с помощью метода Select() объекта Range сначала выделяем сразу три ячейки ("A1", "B1" и "С1"):
//Выделяем три ячейки XL.Range("A1:C1").Select();
а затем устанавливаем необходимые свойства у объекта Selection, который соответствует выделенному диапазону:
//Устанавливаем полужирный текст для выделенного диапазона
XL.Selection.Font.Bold = true;
//Устанавливаем выравнивание по центру для выделенного диапазона
XL.Selection.HorizontalAlignment=xlCenter;
Как и во всех предыдущих сценариях этой главы, данные из файла book.xml посредством функции FileToArray() заносятся в массив PersonArr. Содержимое этого массива сортируется по фамилии и выводится в рабочую книгу Excel в функции ListPersonArray() (этот шаг также является одинаковым во всех сценариях):
//Сортировка массива и печать его содержимого
function ListPersonArray() {
В var i;
 //Сортировка массива по фамилии
В PersonArr.sort(SortLastName);
В for (i=0;i<=PersonArr.length-1;i++) {
В PrintPerson(PersonArr[i]);
В }
}
В функции PrintPerson(PersRec) происходит печать фамилии, имени и номера телефона для одной записи PersRec (напомним, что эта запись является экземпляром объекта Person). Для этого нужно определить номер строки, в ячейки которой будут записаны данные, что делается с помощью увеличения значения счетчика количества записей NomRec:
//Печать содержимого полей объекта 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;
}
Полностью текст сценария 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;          //Квартира