首页 > web前端 > js教程 > JS实现导出Excel的五种方法详解

JS实现导出Excel的五种方法详解

亚连
发布: 2018-05-30 10:04:40
原创
6005 人浏览过

这篇文章主要介绍了JS实现导出Excel的五种方法,结合实例形式较为详细的分析了基于table表格导出Excel文件的相关操作技巧,并附源码供读者下载参考,需要的朋友可以参考下

本文实例讲述了JS实现导出Excel的五种方法。分享给大家供大家参考,具体如下:

这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)


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

<!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(&#39;Saveas&#39;, 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 &#39;ie&#39;;

      }

      //firefox

      else if (explorer.indexOf("Firefox") >= 0) {

        return &#39;Firefox&#39;;

      }

      //Chrome

      else if(explorer.indexOf("Chrome") >= 0){

        return &#39;Chrome&#39;;

      }

      //Opera

      else if(explorer.indexOf("Opera") >= 0){

        return &#39;Opera&#39;;

      }

      //Safari

      else if(explorer.indexOf("Safari") >= 0){

        return &#39;Safari&#39;;

      }

    }

    function method5(tableid) {

      if(getExplorer()==&#39;ie&#39;)

      {

        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 = &#39;data:application/vnd.ms-excel;base64,&#39;,

          template = &#39;<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>&#39;,

          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 || &#39;Worksheet&#39;, table: table.innerHTML}

        window.location.href = uri + base64(format(template, ctx))

      }

    })()

  </script>

</head>

<body>

<p >

  <button type="button" onclick="method1(&#39;tableExcel&#39;)">导出Excel方法一</button>

  <button type="button" onclick="method2(&#39;tableExcel&#39;)">导出Excel方法二</button>

  <button type="button" onclick="getXlsFromTbl(&#39;tableExcel&#39;,&#39;myp&#39;)">导出Excel方法三</button>

  <button type="button" onclick="method4(&#39;tableExcel&#39;)">导出Excel方法四</button>

  <button type="button" onclick="method5(&#39;tableExcel&#39;)">导出Excel方法五</button>

</p>

<p id="myp">

<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>

</p>

</body>

</html>

登录后复制


今天上来发现,好多人,会遇到文件名,格式等问题。这里添加一种方法。兼容性我没有测试,大家可以试下,不过需要利用JQ直接贴代码了。源代码可点击此处本站下载。注意一定要引jquery-3.2.1.min.js,jquery.table2excel.js对应的文件。jquery-3.2.1.min.js这个看你对应的文件版本,不重要。如有问题,欢迎批评指导。


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

<!DOCTYPE html>

<html>

<head lang="en">

  <meta charset="UTF-8">

  <title>html 表格导出道</title>

  <script src="js/vendor/jquery-3.2.1.min.js"></script>

  <script src="jquery.table2excel.js"></script>

  <script language="JavaScript" type="text/javascript">

    $(document).ready(function () {

      $("#btnExport").click(function () {

        $("#tableExcel").table2excel({

          exclude : ".noExl", //过滤位置的 css 类名

          filename : "你想说啥" + new Date().getTime() + ".xls", //文件名称

          name: "Excel Document Name.xlsx",

          exclude_img: true,

          exclude_links: true,

          exclude_inputs: true

        });

      });

    });

  </script>

</head>

<body>

<p >

  <button type="button" id="btnExport" onclick="method5(&#39;tableExcel&#39;)">导出Excel</button>

</p>

<p id="myp">

  <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>

</p>

</body>

</html>

登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

详解Vue.js项目API、Router配置拆分实践

Vue实现active点击切换方法

vue中手机号,邮箱正则验证以及60s发送验证码的实例

以上是JS实现导出Excel的五种方法详解的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板