运用JS导出ecxel表格、实现文件重命名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
<!DOCTYPE html> 
<html> 
<head lang="en"
    <meta charset="UTF-8"
    <title>html 表格导出道</title> 
    <script language="JavaScript" type="text/javascript"
        //第一种方法 
        function method1(tableid) { 
   
            var curTbl = document.getElementById(tableid); 
            var oXL = new ActiveXObject("Excel.Application"); 
            var oWB = oXL.Workbooks.Add(); 
            var oSheet = oWB.ActiveSheet; 
            var sel = document.body.createTextRange(); 
            sel.moveToElementText(curTbl); 
            sel.select(); 
            sel.execCommand("Copy"); 
            oSheet.Paste(); 
            oXL.Visible = true; 
   
        
        //第二种方法 
        function method2(tableid) 
        
   
            var curTbl = document.getElementById(tableid); 
            var oXL = new ActiveXObject("Excel.Application"); 
            var oWB = oXL.Workbooks.Add(); 
            var oSheet = oWB.ActiveSheet; 
            var Lenr = curTbl.rows.length; 
            for (i = 0; i < Lenr; i++
            {        var Lenc = curTbl.rows(i).cells.length; 
                for (j = 0; j < Lenc; j++
                
                    oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText; 
   
                
   
            
            oXL.Visible = true; 
        
        //第三种方法 
        function getXlsFromTbl(inTblId, inWindow){ 
   
            try
                var allStr = ""; 
                var curStr = ""; 
                if (inTblId != null && inTblId != "" && inTblId != "null") { 
   
                    curStr = getTblData(inTblId, inWindow); 
   
                
                if (curStr != null) { 
                    allStr += curStr; 
                
   
                else
   
                    alert("你要导出的表不存在"); 
                    return
                
                var fileName = getExcelFileName(); 
                doFileExport(fileName, allStr); 
   
            
   
            catch(e) { 
   
                alert("导出发生异常:" + e.name + "->" + e.description + "!"); 
   
            
   
        
   
        function getTblData(inTbl, inWindow) { 
   
            var rows = 0
            var tblDocument = document; 
            if (!!inWindow && inWindow != "") { 
   
                if (!document.all(inWindow)) { 
                    return null; 
                
   
                else
                    tblDocument = eval(inWindow).document; 
                
   
            
   
            var curTbl = tblDocument.getElementById(inTbl); 
            var outStr = ""; 
            if (curTbl != null) { 
                for (var j = 0; j < curTbl.rows.length; j++) { 
                    for (var i = 0; i < curTbl.rows[j].cells.length; i++) { 
   
                        if (i == 0 && rows > 0) { 
                            outStr += " t"
                            rows -= 1
                        
   
                        outStr += curTbl.rows[j].cells[i].innerText + "t"
                        if (curTbl.rows[j].cells[i].colSpan > 1) { 
                            for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) { 
                                outStr += " t"
                            
                        
                        if (i == 0) { 
                            if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) { 
                                rows = curTbl.rows[j].cells[i].rowSpan - 1
                            
                        
                    
                    outStr += "rn"
                
            
   
            else
                outStr = null; 
                alert(inTbl + "不存在 !"); 
            
            return outStr; 
        
   
        function getExcelFileName() { 
            var d = new Date(); 
            var curYear = d.getYear(); 
            var curMonth = "" + (d.getMonth() + 1); 
            var curDate = "" + d.getDate(); 
            var curHour = "" + d.getHours(); 
            var curMinute = "" + d.getMinutes(); 
            var curSecond = "" + d.getSeconds(); 
            if (curMonth.length == 1) { 
                curMonth = "0" + curMonth; 
            
   
            if (curDate.length == 1) { 
                curDate = "0" + curDate; 
            
   
            if (curHour.length == 1) { 
                curHour = "0" + curHour; 
            
   
            if (curMinute.length == 1) { 
                curMinute = "0" + curMinute; 
            
   
            if (curSecond.length == 1) { 
                curSecond = "0" + curSecond; 
            
            var fileName = "table" + "_" + curYear + curMonth + curDate + "_" 
                    + curHour + curMinute + curSecond + ".csv"
            return fileName; 
   
        
   
        function doFileExport(inName, inStr) { 
            var xlsWin = null; 
            if (!!document.all("glbHideFrm")) { 
                xlsWin = glbHideFrm; 
            
            else
                var width = 6
                var height = 4
                var openPara = "left=" + (window.screen.width / 2 - width / 2
                        + ",top=" + (window.screen.height / 2 - height / 2
                        + ",scrollbars=no,width=" + width + ",height=" + height; 
                xlsWin = window.open("", "_blank", openPara); 
            
            xlsWin.document.write(inStr); 
            xlsWin.document.close(); 
            xlsWin.document.execCommand('Saveas', true, inName); 
            xlsWin.close(); 
   
        
   
        //第四种 
        function method4(tableid){ 
   
            var curTbl = document.getElementById(tableid); 
            var oXL; 
            try
                oXL = new ActiveXObject("Excel.Application"); //创建AX对象excel 
            }catch(e){ 
                alert("无法启动Excel!\n\n如果您确信您的电脑中已经安装了Excel,"+"那么请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → 对没有标记为安全的ActiveX进行初始化和脚本运行 → 启用"); 
                return false; 
            
            var oWB = oXL.Workbooks.Add(); //获取workbook对象 
            var oSheet = oWB.ActiveSheet;//激活当前sheet 
            var sel = document.body.createTextRange(); 
            sel.moveToElementText(curTbl); //把表格中的内容移到TextRange中 
            sel.select(); //全选TextRange中内容 
            sel.execCommand("Copy");//复制TextRange中内容 
            oSheet.Paste();//粘贴到活动的EXCEL中 
            oXL.Visible = true; //设置excel可见属性 
            var fname = oXL.Application.GetSaveAsFilename("将table导出到excel.xls", "Excel Spreadsheets (*.xls), *.xls"); 
            oWB.SaveAs(fname); 
            oWB.Close(); 
            oXL.Quit(); 
        
   
   
        //第五种方法 
        var idTmr; 
        function  getExplorer() { 
            var explorer = window.navigator.userAgent ; 
            //ie 
            if (explorer.indexOf("MSIE") >= 0) { 
                return 'ie'
            
            //firefox 
            else if (explorer.indexOf("Firefox") >= 0) { 
                return 'Firefox'
            
            //Chrome 
            else if(explorer.indexOf("Chrome") >= 0){ 
                return 'Chrome'
            
            //Opera 
            else if(explorer.indexOf("Opera") >= 0){ 
                return 'Opera'
            
            //Safari 
            else if(explorer.indexOf("Safari") >= 0){ 
                return 'Safari'
            
        
        function method5(tableid) { 
            if(getExplorer()=='ie'
            
                var curTbl = document.getElementById(tableid); 
                var oXL = new ActiveXObject("Excel.Application"); 
                var oWB = oXL.Workbooks.Add(); 
                var xlsheet = oWB.Worksheets(1); 
                var sel = document.body.createTextRange(); 
                sel.moveToElementText(curTbl); 
                sel.select(); 
                sel.execCommand("Copy"); 
                xlsheet.Paste(); 
                oXL.Visible = true; 
   
                try
                    var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls"); 
                } catch (e) { 
                    print("Nested catch caught " + e); 
                } finally
                    oWB.SaveAs(fname); 
                    oWB.Close(savechanges = false); 
                    oXL.Quit(); 
                    oXL = null; 
                    idTmr = window.setInterval("Cleanup();", 1); 
                
   
            
            else 
            
                tableToExcel(tableid) 
            
        
        function Cleanup() { 
            window.clearInterval(idTmr); 
            CollectGarbage(); 
        
        var tableToExcel = (function() { 
            var uri = 'data:application/vnd.ms-excel;base64,'
                    template = '<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>'
                    base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }, 
                    format = function(s, c) { 
                        return s.replace(/{(\w+)}/g, 
                                function(m, p) { return c[p]; }) } 
            return function(table, name) { 
                if (!table.nodeType) table = document.getElementById(table) 
                var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML} 
                window.location.href = uri + base64(format(template, ctx)) 
            
        })() 
   
    </script> 
</head> 
<body> 
   
<div > 
    <button type="button" onclick="method1('tableExcel')">导出Excel方法一</button> 
    <button type="button" onclick="method2('tableExcel')">导出Excel方法二</button> 
    <button type="button" onclick="getXlsFromTbl('tableExcel','myDiv')">导出Excel方法三</button> 
    <button type="button" onclick="method4('tableExcel')">导出Excel方法四</button> </div> 
<div id="myDiv"
<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0"
    <tr> 
        <td colspan="5" align="center">html 表格导出道Excel</td> 
    </tr> 
    <tr> 
        <td>列标题1</td> 
        <td>列标题2</td> 
        <td>类标题3</td> 
        <td>列标题4</td> 
        <td>列标题5</td> 
    </tr> 
    <tr> 
        <td>aaa</td> 
        <td>bbb</td> 
        <td>ccc</td> 
        <td>ddd</td> 
        <td>eee</td> 
    </tr> 
    <tr> 
        <td>AAA</td> 
        <td>BBB</td> 
        <td>CCC</td> 
        <td>DDD</td> 
        <td>EEE</td> 
    </tr> 
    <tr> 
        <td>FFF</td> 
        <td>GGG</td> 
        <td>HHH</td> 
        <td>III</td> 
        <td>JJJ</td> 
    </tr> 
</table> 
</div> 
</body> 
</html> 

优化 :

1、文件重命名:代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html> 
<html> 
<head lang="en"
    <meta charset="UTF-8"
    <title>html 表格导出道</title> 
    <script language="JavaScript" type="text/javascript"
        
        //第五种方法 
        var idTmr; 
        function  getExplorer() { 
            var explorer = window.navigator.userAgent ; 
            //ie 
            if (explorer.indexOf("MSIE") >= 0) { 
                return 'ie'
            
            //firefox 
            else if (explorer.indexOf("Firefox") >= 0) { 
                return 'Firefox'
            
            //Chrome 
            else if(explorer.indexOf("Chrome") >= 0){ 
                return 'Chrome'
            
            //Opera 
            else if(explorer.indexOf("Opera") >= 0){ 
                return 'Opera'
            
            //Safari 
            else if(explorer.indexOf("Safari") >= 0){ 
                return 'Safari'
            
        
        function method5(tableid,name,filename) { 
            if(getExplorer()=='ie'
            
                var curTbl = document.getElementById(tableid); 
                var oXL = new ActiveXObject("Excel.Application"); 
                var oWB = oXL.Workbooks.Add(); 
                var xlsheet = oWB.Worksheets(1); 
                var sel = document.body.createTextRange(); 
                sel.moveToElementText(curTbl); 
                sel.select(); 
                sel.execCommand("Copy"); 
                xlsheet.Paste(); 
                oXL.Visible = true; 
   
                try
                    var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls"); 
                } catch (e) { 
                    print("Nested catch caught " + e); 
                } finally
                    oWB.SaveAs(fname); 
                    oWB.Close(savechanges = false); 
                    oXL.Quit(); 
                    oXL = null; 
                    idTmr = window.setInterval("Cleanup();", 1); 
                
   
            
            else 
            
                tableToExcel(tableid,name,filename) 
            
        
        function Cleanup() { 
            window.clearInterval(idTmr); 
            CollectGarbage(); 
        
        var tableToExcel = (function() { 
            var uri = 'data:application/vnd.ms-excel;base64,'
                    template = '<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>'
                    base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }, 
                    format = function(s, c) { 
                        return s.replace(/{(\w+)}/g, 
                                function(m, p) { return c[p]; }) } 
            return function(table, name,filename) { 
                if (!table.nodeType) table = document.getElementById(table) 
                var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML} 
                document.getElementById("dlink").href = uri + base64(format(template, ctx));
                document.getElementById("dlink").download = filename;
                document.getElementById("dlink").click();
            
        })() 
   
    </script> 
</head> 
<body> 
   
<div > 
    <button type="button" onclick="method1('tableExcel')">导出Excel方法一</button> 
    <button type="button" onclick="method2('tableExcel')">导出Excel方法二</button> 
    <button type="button" onclick="getXlsFromTbl('tableExcel','myDiv')">导出Excel方法三</button> 
    <button type="button" onclick="method4('tableExcel')">导出Excel方法四</button>     <button type="submit" onclick="method5('tableExcel','name','资金管理.xls')" class="btn btn-primary" style="float:right;"><br>    <a id="dlink" href="" style="display: none;"></a><i class="fa fa-download  "></i> 导出表格</button></div> <div id="myDiv"> <table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td colspan="5" align="center">html 表格导出道Excel</td> </tr> <tr> <td>列标题1</td> <td>列标题2</td> <td>类标题3</td> <td>列标题4</td> <td>列标题5</td> </tr> <tr> <td>aaa</td> <td>bbb</td> <td>ccc</td> <td>ddd</td> <td>eee</td> </tr> <tr> <td>AAA</td> <td>BBB</td> <td>CCC</td> <td>DDD</td> <td>EEE</td> </tr> <tr> <td>FFF</td> <td>GGG</td> <td>HHH</td> <td>III</td> <td>JJJ</td> </tr> </table> </div> </body> </html>

  

 

posted @   想做土匪的书生  阅读(2798)  评论(6编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示