пятница, 13 февраля 2009 г.

Запись и чтение из файлов Excel при отсутствии установленного Excel #2

Иногда просматриваю статистику по блогу в Google Analytics. С момента публикации поста про Запись и чтение из файлов Excel при отсутствии установленного Excel он уверенно держится в топе по посещаемости :) Хотя последнее время пост про горячие клавиши Windows начал выходить на первое место. Ну да ладно...

Решил я тут еще немного поделиться сакральным знанием про Excel, а именно - рассказать еще один способ формирования файлов, понятных для этой программы.

Как известно, Excel понимает много разных форматов файлов. Среди них есть "Таблица Xml (*.xml)". Достоинств у этого формата аж три штуки:

  • корректно распознается системой как файл Excel, несмотря на то, что имеет расширение .xml
  • имеет относительно простую структуру, легко просматривается/правится даже в блокноте
  • полностью сохраняется форматирование страниц, таблиц и ячеек, заданное посредством Excel

Формат предельно простой. Все что нужно можно узнать методом "научного тыка" путем создания документа с нужным форматированием и последующего его просмотра в блокноте. Условно можно разделить на 4 блока:
описание документа/книги
описание применяемых к ячейкам стилей (это чтобы можно было, например, использовать разные цвета/шрифты в ячейках)
описание таблиц
описание параметров печати - можно выкинуть, пусть пользователи сами настраивают :)

Каждая таблица содержит набор колонок, строк и ячеек.

Колонки задают размеры колонок, способ форматирования текста (например, перенос по словам) и т.п. Внимание! Автоматическое расширение колонки работает только для числовых полей и дат (имхо - извращение, впрочем, это совершенно нормально для Microsoft).
Пример:
   <column ss:width="200.25">
   <column ss:autofitwidth="1" ss:width="60">
Каждая строка имеет номер (индекс) и разные параметры. Если индекс не указан, считается, что строка находится ниже предыдущей. Индексация начинается с единицы.

Каждая ячейка имеет номер (индекс), стиль и разные параметры. Тип данных в ячейке задается через вложенный тэг . Пример:

   <cell ss:styleid="s21"><data ss:type="DateTime">2009-02-02T00:00:00.000</data></cell>
   <cell><data ss:type="String">строка</data></cell>
Вообщем-то и все. Остальное можно прочитать в мануале или же сформировать файл в Excel, сохранить и посмотреть что получилось.

Посидев немного я написал соответствующий набор классов , которые позволяют сформировать простенький Excel-xml файл. Я сознательно не использую никакие функции для работы с xml и формирую файл как обычный текст. Так быстрее. Универсальность как конечная цель не ставилась - соответственно можно сделать только одну таблицу, стили жестко зашиты в коде. Ну и т.д. и т.п.

Пример использования:


   ExcelTable table = new ExcelTable("Таблица");

   table.columns.Add(new ExcelColumn(false, 260));
   table.columns.Add(new ExcelColumn(true, 60)); //autofit = 1

   ExcelRow row = new ExcelRow();
   row.AddCell("Заголовок1");
   row.AddCell("Заголовок2");
   table.AddRow(row);

   row = new ExcelRow();
   row.AddCell("дата");
   row.AddCell(DateTime.Now, eDateType.Date);
   table.AddRow(row);

   row = new ExcelRow();
   row.AddCell("отмеченное число");
   row.AddCell(25, true);
   table.AddRow(row);

   table.Save("test.xml")

Как видите - ничего сложного. Пользуйтесь :)

Комментариев нет:

Отправить комментарий