首頁 > web前端 > js教程 > 五種JS導出Excel的方法

五種JS導出Excel的方法

小云云
發布: 2018-03-16 09:29:38
原創
5954 人瀏覽過

本文主要和大家介紹了JS實現導出Excel的五種方法,結合實例形式較為詳細的分析了基於table表格導出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>

登入後複製

相關推薦:

##php匯出Excel裡HTML內容檔案類別方法

Yii2框架中PHPExcel匯出Excel檔案方法

php使用原生的方法匯出excel實例分享

以上是五種JS導出Excel的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板