【发布时间】:2011-06-12 07:59:25
【问题描述】:
我从数据库中的数据生成了一个复杂的 HTML 摘要报告,该报告可能是数据库中可能有 200,000 行的摘要。用户可以单击链接来请求 Excel 版本。
当他们执行 JS 脚本时,会提取报告的关键组件并将它们填充到隐藏 iframe 中的表单中。此表单提交给生成报告的 Excel 版本(不包括图形等)的服务器端脚本。
由于报表的计算复杂且“成本高”,因此不要再次运行它们来创建 Excel 版本是有意义的,因为所有数据都已经在页面上。此外,一旦加载,用户可能已经自定义了报告,我也可以使用 JS 将这些首选项传递给表单,以便 Excel 文档也反映它们。
我这样做的方法是为报告的每个组件包括以下内容,这些组件将传输到 Excel 版本中的一行。我劫持了一个不被使用的 HTML 标签。
<code id="xl_row_211865_2_x" class="rowlabel">Musicals}{40%}{28.6%}{6</code>
上面的代码元素是 HTML 报告中下面一行的摘要,它成为 Excel 文档中的一行,包括标签和各种数据元素。一份报告中可能有一千个或更多这样的元素。
由于数据包含文本,我不得不使用 }{ 之类的东西作为字段分隔符,因为这不太可能出现在报告中的任何真实文本中。我在 CSS 中将 code 设置为 display:none。
当用户想要报告的 Excel 版本时,JS 代码会在 HTML 中搜索任何 <code> 元素并将其 className 和 innerHTML 放入表单中。 className 指示如何在 Excel 中格式化该行,然后将数据放入 Excel 行的相邻单元格中。
HTML 报告显示一个百分比基数(他们可以在它们之间切换),但用户在请求 Excel 版本时的偏好是同时包含两者。
有更好的方法吗?
(因为这是一个复杂的网络应用程序的一部分,所以没有用户会关闭 CSS 或缺少 javascript,否则他们不会走到这一步) 补充:我不能使用 HTML5,因为用户通常是使用 IE6 等旧浏览器的公司
【问题讨论】:
-
这在服务器上的成本有多大(实际上)。在服务器上执行此操作是否会更容易/更易于维护,并且在页面的初始加载中没有数千个可能未使用的代码标签?
-
我不知道这是否可能,但它似乎对我有用:将 JSON 对象保留为全局变量?还是隐藏在某个地方?并且在请求时,将 JSON 发送到 excel 解析器?
-
报告中的行是 HTML 还是图像?如果它们是 HTML,您的 javascript 可以从中提取信息,而不是将其再次存储在不同的额外标签中。
标签: javascript html embed