В настоящее время разбор и анализ таблиц Excel в программе TestComplete вызывает сложности при разработке тест-скриптов. Одним из вариантов решения данной проблемы может стать анализ таблиц Excel, сохраненных в XML-формате. MS Office позволяет сохранять таблицы в формате "Таблица XML". В данной статье мы рассмотрим возможность разбора и анализа таблиц в данном формате. Более подробную информацию о формате можно получить на сайте Microsoft. Информацию об использованных в этой статье методах и свойствах MS XML можно подчеркнуть из статьи Разбор и анализ XML-файла в TestComplete.
Создадим таблицу Excel, например, подобную этой:

При сохранении в XML формате данная таблица будет выглядеть следующим образом:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>Долганов Алексей Александрович</Author>
<LastAuthor>Долганов Алексей Александрович</LastAuthor>
<Created>2010-07-13T09:35:04Z</Created>
<Version>12.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>11820</WindowHeight>
<WindowWidth>15315</WindowWidth>
<WindowTopX>120</WindowTopX>
<WindowTopY>45</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s62">
<NumberFormat ss:Format="#,##0.00"р.""/>
</Style>
</Styles>
<Worksheet ss:Name="Лист1">
<Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="3" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15">
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">Молоко</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="Number">10</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">Мясо</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="Number">50</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">Яблоки</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="Number">20</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<Selected/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Структура XML-файла начинается с корневого элемента Workbook, обозначающего книгу. Перейдем к его дочерним элементам.
- DocumentProperties (Свойства документа). В этом элементе не содержится никаких данных из таблицы, поэтому этот элемент мы рассматривать не будем;
- ExcelWorkbook (Книга Excel). Также в этом элементе не содержится важной для нас информации, поэтому также пропускаем;
- Styles (Стили). Содержит форматирование таблицы. Расмотрим этот элемент вкратце. Будем считать что нам важнее сами данные, чем их форматирование;
- Worksheet (Лист). Данных элементов может быть несколько, в зависимости от количества листов в книге. Отобрать данные элементы можно с помощью XML-метода getElementsByTagName.
WorkSheet
Обязательные параметры:
- Ss:Name (Название листа).
Необязательные параметры:
- Ss:Protected (Информация о защите листа);
- Ss:RightToLeft (Направление текста).
Дочерние элементы:
- Table (Таблица). Данные;
- WorksheetOptions (Настройки). Не содержит данных. рассматриваться не будет.
Table
Обязательные параметры: нет
Необязательные параметры:
- Ss:DefaultColumnWidth (Ширина столбцов по умолчанию). Указывается в pt (1pt = 4/3px);
- Ss:DefaultRowHeight (Высота строк по умолчанию). Указывается в pt (1pt = 4/3px);
- Ss:ExpandedColumnCount (Общее число столбцов в этой таблице);
- Ss:ExpandedRowCount (Общее число строк в этой таблице);
- Ss:LeftCell (Начало таблицы слева);
- Ss:StyleID (Стиль таблицы). Ссылается на элемент Styles (подробнее ниже);
- Ss:TopCell (Начала таблицы сверху).
Дочерние элементы:
- Column (Столбцы);
- Row (Строки).
Column
Обязательные параметры: нет
Необязательные параметры:
- C:Caption (Заголовок);
- Ss:AutoFitWidth (Автоматическая ширина столбца). Истина если содержит значение 1;
- Ss:Hidden (Признак скрытия столбца);
- Ss:Index (Индекс столбца);
- Ss:Span (Количество столбцов с одинаковым форматированием);
- Ss:StyleID (Стиль столбца);
- Ss:Width (Ширина столбца). Указывается в pt (1pt = 4/3px).
Остановимся подробнее на параметрах ss:Index и ss:Span. Например, имеется 5 столбцов:
- Ширина 100pt;
- Ширина 20pt;
- Ширина 20pt;
- Ширина 20pt;
- Ширина 50pt.
В XML-файле столбцы должны быть описаны следующим образом:
<column ss:width="100"/>
<column ss:span="2" ss:width="20"/>
<column ss:index="5" ss:width="50"/>
Row
Обязательные параметры: нет
Необязательные параметры:
- C:Caption (Заголовок);
- Ss:AutoFitWidth (Автоматическая высота строки). Истина если содержит значение 1;
- Ss:Height (Высота строки). Указывается в pt (1pt = 4/3px);
- Ss:Hidden (Признак скрытия строки);
- Ss:Index (Индекс строки);
- Ss:Span (Количество строк с одинаковым форматированием);
- Ss:StyleID (Стиль строки).
Дочерние элементы:
- Cell (Ячейка).
Cell
Обязательные параметры:
Ss:Type (Тип ячейки). Возможные значения: Number (Числовой); DateTime (Дата и время); Boolean (Логический); String (Строковый); Error (Ошибка). Возможные значения: #NULL!; #DIV/0!; #VALUE!; #REF!; #NAME?; #NUM!; #N/A; #CIRC!
Необязательные параметры: нет
Дочерние элементы:
- B (Жирным);
- Font (Шрифт);
- I (Курсив);
- S (Зачеркнутый);
- Span (Форматированный);
- Sub (Верхний регистр);
- Sup (Нижний регистр);
- U (Подчеркивание).
Значение элемента: Значение ячейки