HTML TABLE 转换成Excel多Sheet,C#(补充版)
将多个Table ,导出到一个Excel 文件中,其中,每一个Table 作为一个Sheet
一个小项目,统计几张报表,HTML TABLE 显示在页面中,用标签的方式,要实现把所有报表一次
导出成Excel 并下载,网上看了些方法,都不完善,索性自己写吧
基本思路:是将HTML 报表转换成XML 格式的EXCEL 存储形式,然后输出给客户端。
先看过用 HTML 格式的 EXCEL,不知道如何实现多Sheet,放弃;又找到一个NOPI 的代码,粘
过来有些问题,不愿意研究了,也放弃了;后来,新建了一个两、三个Sheet 的简单EXCEL,另
存为xml ,用编辑器打开看了一下,感觉有戏。
如上图,打开xml 文件后,很清晰的看到组织结构,
(在EXCEL 中修改一下XML 文件,再用文件编辑器打开XML 就又能看到变化)
因此,具体的方案如下:
文件 使用
to_excel.js 在页面中,将各个报表的HTML 转换成XML 格式
to_excel.html 当JS 将HTML TABLE 等转换成EXCEL XML 后,用IFRAME 加载此文件,此文件中
有一个表单,将EXCEL XML 通过此表单提交到服务器
to_excel.aspx 接收to_excel.html 提交的数据,组装成完整的EXCEL XML 返回给客户端下载
为便于说明, 以下是页面中报表形式:
显示效果类似:
其中 report-content 有多个,每一个代表一张报表
导出后的结果
下面是JS 文件
jQuery(document).ready(function () {
/// 点击页面中的"导出EXCEL"按钮
$(".f_class_a_expoert_report_excel_all").click(function () {
var data_target = $("div.report-content");
if (data_target.length == 0) {
alert("无有效报表!");
return false;
}
if ($("#id_iframe_download").length > 0) {
$("#id_iframe_download").remove();
}
$("body").append('');
$("#id_iframe_download").load(function () {
var sALL = "";
var i = 0;
if (typeof (eval(this.contentWindow.do_download)) == "function") {
//f_pop_waitting("正在处理数据...");
data_target.each(function () {
sALL += toExcelXmlWorkSheet($(this));
});
this.contentWindow.focus();
this.contentWindow.do_download(sALL,$(".title h1").text());
//f_pop_waitting_close("处理结束...");