HTML导出Excel文件(兼容IE及所有浏览器)

注意:IE浏览器需要以下设置:

打开IE,在常用工具栏中选择“工具”--->Internet选项---->选择"安全"标签页--->选择"自定义级别"--->弹出的窗口中找到ActiveX控件和插件--->
将"ActiveX控件自动提示"
"对没有标记安全的ActiveX控件进行初始化和脚本运行"
"下载未签名的ActiveX控件"
三项 选择启用 即可!

HtmlExportToExcel.js 代码

  1 /*
  2  * HTML导出Excel文件(兼容IE及所有浏览器)
  3  * @param {any} tableid  table父元素ID
  4  * @param {any} filename 文件名称
  5  */
  6 function HtmlExportToExcel(tableid, filename) {
  7     if (getExplorer() === ‘ie‘ || getExplorer() === undefined) {
  8         HtmlExportToExcelForIE(tableid, filename);
  9     }
 10     else {
 11         HtmlExportToExcelForEntire(tableid, filename);
 12     }
 13 }
 14
 15 //IE浏览器导出Excel
 16 function HtmlExportToExcelForIE(tableId, filename) {
 17     try {
 18         var oXL = new ActiveXObject("excel.Application");
 19         //oXL.Visible = true;
 20         //oXL.ScreenUpdating = false;
 21     } catch (e1) {
 22         try {
 23             oXL = new ActiveXObject("et.Application");
 24         } catch (e2) {
 25             alert(e2.description + "\n\n\n要使用EXCEL对象,您必须安装Excel电子表格软件\n或者,需要安装Kingsoft ET软件\n\n同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。");
 26             return;
 27         }
 28     }
 29     //创建AX对象excel
 30     var oWB = oXL.Workbooks.Add();
 31     //获取workbook对象
 32     var xlsheet = oWB.Worksheets(1);
 33
 34     var elTable = document.getElementById(tableId);
 35
 36     //替换掉表格td中隐藏的html元素
 37     var tableHtml = ReplaceHtml(elTable.innerHTML);
 38
 39     var newTable = document.getElementById("newData");
 40     //console.log();
 41     newTable.innerHTML = tableHtml;
 42
 43     //激活当前sheet
 44     var sel = document.body.createTextRange();
 45     sel.moveToElementText(newTable);
 46     //把表格中的内容移到TextRange中
 47     sel.select;
 48     //全选TextRange中内容
 49     sel.execCommand("Copy");
 50     //复制TextRange中内容
 51     xlsheet.Paste();
 52     //粘贴到活动的EXCEL中
 53     oXL.Visible = true;
 54     //设置excel可见属性
 55
 56     newTable.innerHTML = "";
 57
 58     try {
 59         //设置 sheet 名称
 60         xlsheet.Name = filename;
 61         var fname = oXL.Application.GetSaveAsFilename(filename + ".xls", "Excel Spreadsheets (*.xls), *.xls");
 62     } catch (e) {
 63         print("Nested catch caught " + e);
 64     } finally {
 65         oWB.SaveAs(fname);
 66         oWB.Close();
 67         //xls.visible = false;
 68         oXL.ScreenUpdating = true;
 69         oXL.Quit();
 70     }
 71 }
 72
 73 //非IE浏览器导出Excel
 74 var HtmlExportToExcelForEntire = (function () {
 75     var uri = ‘data:application/vnd.ms-excel;base64,‘,
 76         template = ‘<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->‘ +
 77             /**********这部分是加载表格的样式  没有样式可以省略 start**********/
 78             ‘<style type="text/css">‘ +
 79             ‘.tablefrom {width: 100%;border-collapse: collapse;}‘ +
 80             ‘.tablefrom, .tablefrom td, .tablefrom th {text-align: center;font: 12px Arial, Helvetica, sans-serif;border: 1px solid #fff;}‘ +
 81             ‘.tablefrom th{background:#328aa4;color:#fff;}‘ +
 82             ‘.tablefrom td{background:#e5f1f4;}‘ +
 83             ‘.tablefrom .BlueBgColor td {color: #fff;background-color: #0070c0;}‘ +
 84             ‘.tablefrom .LightBlueBgColor td {color: #000000;background-color: #bdd7ee;}‘ +
 85             ‘.tablefrom  tr .BlueBgColorTd { color: #fff;background-color: #0070c0;}‘ +
 86             ‘.tablefrom tr .LightBlueBgColorTd {color: #000000;background-color: #bdd7ee;}‘ +
 87             ‘</style>‘
 88             /**********这部分是加载表格的样式  没有样式可以省略 end**********/
 89             + ‘</head><body>{table}</body></html>‘,
 90         base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))); },
 91         format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }); };
 92     return function (table, name) {
 93         if (!table.nodeType) { table = document.getElementById(table); }
 94         //替换掉表格td中隐藏的html元素
 95         var strHTML = ReplaceHtml(table.innerHTML);
 96         var ctx = { worksheet: name || ‘Worksheet‘, table: strHTML };
 97
 98         document.getElementById("dlink").href = uri + base64(format(template, ctx));
 99         document.getElementById("dlink").download = name + ".xls";
100         document.getElementById("dlink").click();
101     };
102 })();
103
104 //获取当前使用浏览器
105 function getExplorer() {
106     var explorer = window.navigator.userAgent;
107     //ie
108     if (explorer.indexOf("MSIE") >= 0) {
109         return ‘ie‘;
110     }
111     //firefox
112     else if (explorer.indexOf("Firefox") >= 0) {
113         return ‘Firefox‘;
114     }
115     //Chrome
116     else if (explorer.indexOf("Chrome") >= 0) {
117         return ‘Chrome‘;
118     }
119     //Opera
120     else if (explorer.indexOf("Opera") >= 0) {
121         return ‘Opera‘;
122     }
123     //Safari
124     else if (explorer.indexOf("Safari") >= 0) {
125         return ‘Safari‘;
126     }
127 }
128
129 //将隐藏的HTML元素替换掉
130 function ReplaceHtml(tableHtml) {
131     var radioValue = $(‘input[name="bedStatus"]:checked ‘).val();
132     if (radioValue === ‘yuan‘) {
133         tableHtml = tableHtml.replace(/<span class="span_wanyuan" [^<>]*?>(.*?)<\/span>/gi, "");
134     }
135     else if (radioValue === ‘wanyuan‘) {
136         tableHtml = tableHtml.replace(/<span class="span_yuan" [^<>]*?>(.*?)<\/span>/gi, "");
137     }
138     return tableHtml;
139 }

另外,我的功能需要替换掉td中隐藏的html元素,所以需要将新的table复制到另一个隐藏的div中。

页面html代码:

 1 <div id="divData">
 2     <table class="tablefrom" id="tbData" style="width: 100%; border-collapse: collapse;" border="0" cellspacing="0">
 3         <tbody>
 4             <tr>
 5                 <th rowspan="2" colspan="2" scope="col">序号</th>
 6                 <th style="min-width: 70px;" rowspan="2" scope="col">项目</th>
 7                 <th style="min-width: 50px;" rowspan="2" scope="col">维度</th>
 8                 <th style="min-width: 50px;" rowspan="2" scope="col">本月资金</th>
 9                 <th rowspan="2" colspan="1" scope="col">某部门</th>
10                 <th colspan="2" scope="col">支付</th>
11             </tr>
12             <tr>
13                 <th style="min-width: 50px;" scope="col">执行</th>
14                 <th style="min-width: 50px;" scope="col">余额</th>
15             </tr>
16             <tr>
17                 <td style="color: rgb(0, 0, 0); font-weight: bold; background-color: rgb(189, 215, 238);" rowspan="163" scope="col">经营费用类</td>
18                 <td style="min-width: 50px;" rowspan="3" scope="col">1</td>
19                 <td rowspan="3" scope="col">销售退款</td>
20                 <td scope="col">实际</td>
21                 <td style="color: rgb(0, 0, 0); background-color: rgb(189, 215, 238);" scope="col"><span class="span_yuan">100000</span><span class="span_wanyuan" style="display: none;">10</span></td>
22                 <td scope="col"><span class="span_yuan">100000</span><span class="span_wanyuan" style="display: none;">10</span></td>
23                 <td scope="col"><span class="span_yuan">100000</span><span class="span_wanyuan" style="display: none;">10</span></td>
24                 <td scope="col"><span class="span_yuan">900000</span><span class="span_wanyuan" style="display: none;">90</span></td>
25             </tr>
26             <tr>
27                 <td scope="col">计划</td>
28                 <td style="color: rgb(0, 0, 0); background-color: rgb(189, 215, 238);" scope="col"><span class="span_yuan">1000000</span><span class="span_wanyuan" style="display: none;">100</span></td>
29                 <td scope="col"><span class="span_yuan">1000000</span><span class="span_wanyuan" style="display: none;">100</span></td>
30                 <td scope="col">-</td>
31                 <td scope="col">-</td>
32             </tr>
33             <tr>
34                 <td scope="col">差额</td>
35                 <td style="color: rgb(0, 0, 0); background-color: rgb(189, 215, 238);" scope="col"><span class="span_yuan">900000</span><span class="span_wanyuan" style="display: none;">90</span></td>
36                 <td scope="col"><span class="span_yuan">900000</span><span class="span_wanyuan" style="display: none;">90</span></td>
37                 <td scope="col">-</td>
38                 <td scope="col">-</td>
39             </tr>
40         </tbody>
41     </table>
42 </div>
43 <div id="newData" style="display: none;"></div>

原文地址:https://www.cnblogs.com/wsk198726/p/9707029.html

时间: 2024-10-09 01:25:56

HTML导出Excel文件(兼容IE及所有浏览器)的相关文章

PHP从数据库导出EXCEL文件

参考博客链接:http://www.cnblogs.com/huangcong/p/3687665.html 我的程序代码 原生导出Excel文件 <?phpheader('Content-type: text/html; charset=utf-8');header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filename=test.xls"); $conn =

TXLSReadWriteII2版本导出Excel文件:

//TXLSReadWriteII2版本导出Excel文件: procedure TForm1.N1Click(Sender: TObject); var i: Integer; aSaveDialog: TSaveDialog; aFileName, aStampTime: AnsiString; aXlsObj: TXLSReadWriteII2; p: PDataRec; begin aSaveDialog := TSaveDialog.Create(Self); try aSaveDia

使用Open Xml按模版导出Excel文件(下)

(3)将数据写入Excel 把数据写入到Excel文件是本文的关键技术.这里需要用到OpenXml.在Sdk里已经提供了足够的文件操作方法,我们就调用这些方法,将数据源的数据写到文件中. 首先我们定义了一些工具类,用于读取单元格的行列值. 在Excel中,每个单元格都有一个地址:如B3表示第二行第三列的格子,在Utility中的GetRowIndex和GetColumnIndex就是输入字符串”B3”,返回Int类型的索引2 和3.还有输入“B3”,返回列的字母“B”等等. 在WorkSheet

PHPExcel导出Excel文件

error_reporting(0); require_once 'phpexcel/PHPExcel.php'; require_once 'phpexcel/PHPExcel/IOFactory.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator("BillHong") ->setLastModifiedBy("BillHong")//创建

Java web中不同浏览器间导出Excel文件名称乱码问题解决方案

问题描述: 对于不同浏览器存在对中文编码格式问题,从而在导出Excel文件时,中文文件名出现乱码的情况,即在程序中给要导出的文件指定一个中文名字时,在浏览器上出现的下载框中的文件名出现了乱码,解决如下: 解决方案: [java] view plain copy Date dt=new Date();//如果不需要格式,可直接用dt,dt就是当前系统时间 DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//设置显示格

PHP导出excel文件,第一步先实现PHP模板导出不带数据

今天继续研究PHP导出excel文件,把复杂的事情简单化,一步步实现功能,首先实现模板文件的导出,随后再实现写入数据后导出,最终实现功能,这是基本思路.中间可以加一步,先自己写入数据导出试试,随后再数据库导入.我首先把程序提交到自建的eubexcel.php文件,选用post提交,导出excel文件的程序在这个页面里书写,参考昨天下载的PHPExcel-1.8组件里的参考文档,先部署导出excel,具体代码如下 <?php error_reporting(E_ALL);ini_set('disp

使用Open Xml按模版导出Excel文件(上)

完整内容请参见我的网站 http://www.iyummy.com.cn/Blog/Detail/3 我们在做应用系统中经常需要将数据库中的数据导出成为Excel文件.如果是要导出报表的话,最好是能够根据定义好的模版生成一个美观的Excel. 以前要生成有样式的Excel.一般是使用Xml形式的Excel修改,或者使用Excel的Api.前者要修改样式的话特别麻烦,后者在Asp.net里会起很多进程. 庆幸的是从office 2007开始,微软使用了OpenXml来定义office的文件.使用r

JQGrid导出Excel文件

系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件及方法 Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页.搜索.格式化.自定义按钮 Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid Web jquery表格组件 JQGrid 的使用 - 7.查询数据.编辑数据.删除数据

(C#)利用Aspose.Cells组件导入导出excel文件

Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: [csharp] view plain copy print? public static System.Data.DataTable ReadExcel(String strFileName) { Workbook book = new Workbook(); book.Open(strFileName); Worksheet sheet = book.Worksheets[0]; Cells cells =