HTML 2 XLS

В просторах интернета попалась информация, что, если создать простую таблицу в формате HTML, а затем переименовать расширение файла на .xls, то Microsoft Excel нормально примет такой файл.

Выдалось несколько свободных минут. На компьютере с XP нашелся Microsoft Office Excel 2007 и любимый FAR. Так что всё будет быстро проверено. Интересует, в первую очередь, совместимость.

Пробуем:

Создаём файл 1.html.

FAR: Shift-F4 - 1.html - Enter.

Увеличить

Файл готов. Сохраняем F2. Выходим Esc. Копируем в такой-же, но с расширением .xls: F5 - *.xls - Enter. Запускаем фай. Упс! Первый глюк:

Увеличить

Выбираем "Да".

Первое "Ура!".

Увеличить

Добавим формулу:

Давайте сложим значения первых двух ячеек и результат умножим на значение третьей. Всё будем делать как в Excel'е: =(A1+B1)*C1. Добавим ячейку:

Увеличить

Посмотрим результат в Excel:

Увеличить

# - Настораживает. Берём за границу между столбцами D и E, раздвигаем столбец и ...

Увеличить

... видим результат! Ура! Всё подсчитано.

Но хочется чтобы всё было видно сразу, а не какие-то # # #

Давайте укажем ячейке ширину:

Увеличить

Результат:

Увеличить

Значение в ячейке видно сразу. Ok.

Примечание: если текст определён заранее, то ширина столбца подгоняется под ширину текста, а если значение вычисляемое, то столбец не расширяется :-P

Границы:

Да. Хочу видеть границы, чтобы таблица была расчерчена линиями при печати.

Пробуем: BORDER=1.

Увеличить

Результат:

Увеличить

И это работает!

CSS - таблицы стилей:

А вот хочу, чтобы все ячейки были одинаковой ширины.

Заодно ещё строчку к таблице добавлю.

Увеличить

...

Увеличить

Ширины НЕТ :(

Ладно, попробуем границы перевести из HTML в CSS ...

Увеличить

...

Увеличить

Опа ... А границы-то появились. Толстенные. Но ячейки не расширились.

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

Увеличить

Получим вид:

Увеличить

При этом:

Как видите - граблей полно.

Добавим строчку с итогом, объединим ячейки

Увеличить

...

Увеличить

Получилось. Теперь хотим выровнять ячейку "ИТОГО" по правому краю.

Увеличить

Добавили класс .TDR. Вроде всё просто и должно заработать.

Увеличить

Гы-гы... Вместо "Итого" - загогулины получаются. С чего бы это? Ради прикола уберём переднюю часть из .TDR:

Увеличить

И ... :-D

Увеличить

Выровнялось по правому краю и написано стало по-русски. В чём подвох? Воистину, Microsoft непредсказуем :)

А что будет в Microsoft Office 97?

Запускаем файл и ... фигушки. Цифры, буквы есть, а вот всё оформление исчезло. Ни ширины колонок, ни рамочек.

Увеличить

Грабли в том, что CSS не переварился никак :-(

Приходится полностью вернуться на HTML. При этом выявляется очередное ограничение: цвет #FC9 не проходит, только в формате #FFCC99. И ещё прикол: #FFE8CC - то же не прошёл - остался белым. Похоже, что обрабатываются только цвета заранее подобранные Майкрософтом.

Сразу ещё предупрежу: никакого JavaScript'а генерирующего таблицу на лету!

Увеличить

Перетягиваю документ в Word - вставляется.

А другие?

LINUX - Ubuntu - Open Office 2.4.

.xls - принял с двумя проблемами: WIDTH не проходит, и, по-умолчанию кодировка не прошла. Пришлось добавить META.

Как .xls, так же обработался и файл с расширением .ods - родной формат для электронных таблиц Open Office.

Ячейки не растянулись под размер вписанного текста. Для этого приходится сделать двойной клик по правой границе названия столбца.

Для растяжки ячеек под текст пришлось их объединить.

Увеличить

Вот и окончательный код:

Увеличить

Проверяем результат в Excel 97:

Увеличить

Всё в норме.


К чему это всё?

Да может когда-нибудь на каком-либо языке надо будет сгенерить на лету Excel'овскую таблицу.

А почему бы не взять готовый модуль?

Можно. Но так прикольнее.

Простой пример.

Таблица от A1 до Z9, в каждой ячейке которой написано имя ячейки (в A1 написано "A1", в B1 - "B1" и т.д.).

Увеличить

Запускаем, и в каталоге появился файл test.xls необходимого содержания:

Увеличить

Файлы:


Андрей Илларионов
14-12-2009

1. Штурман 25-10-2010, 11:35
самый простой вариант сделать таблицу Excel на произвольном языке - сохранить таблицу в текстовый файл с разделителями-табуляциями, и добавить расширение *.xls