Иногда просматриваю статистику по блогу в 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")
Как видите - ничего сложного. Пользуйтесь :)