Рис. 8.10. Рабочая книга Microsoft Excel с данными из файла book.xml
Для того чтобы использовать определенные в Excel именные константы без их предварительной инициализации (как мы это делали в сценариях, работающих с Word), наш сценарий будет представлять собой WS-файл ListXLS.wsf, в котором мы определим с помощью тега <reference> ссылку на объект Excel.Sheet:
<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;
//В третьем столбце печатаем телефон