Я создаю сложный сводный отчет в формате HTML на основе данных в базе данных, который может быть суммой в 200 000 строк в базе данных.Пользователь может щелкнуть ссылку, чтобы запросить версию Excel.
При выполнении сценария JS извлекает ключевые компоненты отчета и помещает их в форму в скрытом фрейме.Эта форма отправляется на серверный сценарий, который генерирует версию отчета в формате Excel (без графики и т. Д.).
Поскольку вычисления для отчета являются сложными и «дорогостоящими», имеет смысл не запускать их снова.создать версию Excel, так как все данные уже есть на странице.Кроме того, пользователь может настроить отчет после его загрузки, и я могу использовать JS, чтобы передать эти настройки в форму, чтобы документ Excel также отражал их.
Способ, которым я делаю это, заключается в том, чтобы включитьследующие для каждого компонента отчета, который переносится в строку в версии Excel.Я угнал HTML-тег, который иначе не используется.
<code id="xl_row_211865_2_x" class="rowlabel">Musicals}{40%}{28.6%}{6</code>
Элемент кода выше представляет собой сводку строки ниже в отчете HTML, которая становится одной строкой в документе Excel и содержит метку и различные элементы данных.В одном отчете может быть тысяча или более таких элементов.
![alt text](https://i.stack.imgur.com/2UGCO.png)
Поскольку данные содержат текст, мне пришлось использовать что-то вроде }{
в качестве разделителя полей, поскольку это вряд ли произойдет в любом реальном тексте в отчете.У меня code
установлено отображение: нет в CSS.
Когда пользователь хочет получить версию отчета для Excel, код JS ищет в HTML любые элементы <code>
и помещает свои className и innerHTML вформа.ClassName указывает, как форматировать строку в Excel, а затем данные помещаются в соседние ячейки в строке Excel.
![alt text](https://i.stack.imgur.com/j2OeK.png)
В отчете HTML отображается один процентный показатель (они могут переключатьсямежду ними), но предпочтение пользователя при запросе версии Excel должно было включать оба.
Есть ли лучший способ сделать это?
(Так как это часть сложного веб-приложения, нетпользователь собирается отключить CSS, или ему не хватает javascript, или он не сможет зайти так далеко) ДОБАВЛЕНО: я не могу использовать HTML5, поскольку пользователи часто работают в старых браузерах, таких как IE6