Export2Excel.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /* eslint-disable */
  2. require('script-loader!file-saver');
  3. // require('script-loader!./Blob');
  4. const { blob } = require('./Blob')
  5. // /static/js/util.js?v=1.0.0
  6. require('script-loader!xlsx/dist/xlsx.core.min');
  7. const getNowDate = () => {
  8. var date = new Date();
  9. var sign2 = ":";
  10. var year = date.getFullYear() // 年
  11. var month = date.getMonth() + 1; // 月
  12. var day = date.getDate(); // 日
  13. var hour = date.getHours(); // 时
  14. var minutes = date.getMinutes(); // 分
  15. var seconds = date.getSeconds() //秒
  16. var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'];
  17. var week = weekArr[date.getDay()];
  18. // 给一位数的数据前面加 “0”
  19. if (month >= 1 && month <= 9) {
  20. month = "0" + month;
  21. }
  22. if (day >= 0 && day <= 9) {
  23. day = "0" + day;
  24. }
  25. if (hour >= 0 && hour <= 9) {
  26. hour = "0" + hour;
  27. }
  28. if (minutes >= 0 && minutes <= 9) {
  29. minutes = "0" + minutes;
  30. }
  31. if (seconds >= 0 && seconds <= 9) {
  32. seconds = "0" + seconds;
  33. }
  34. return year + "-" + month + "-" + day + " " + hour + sign2 + minutes + sign2 + seconds;
  35. }
  36. function generateArray(table) {
  37. var out = [];
  38. var rows = table.querySelectorAll('tr');
  39. var ranges = [];
  40. for (var R = 0; R < rows.length; ++R) {
  41. var outRow = [];
  42. var row = rows[R];
  43. var columns = row.querySelectorAll('td');
  44. for (var C = 0; C < columns.length; ++C) {
  45. var cell = columns[C];
  46. var colspan = cell.getAttribute('colspan');
  47. var rowspan = cell.getAttribute('rowspan');
  48. var cellValue = cell.innerText;
  49. if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
  50. //Skip ranges
  51. ranges.forEach(function (range) {
  52. if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
  53. for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
  54. }
  55. });
  56. //Handle Row Span
  57. if (rowspan || colspan) {
  58. rowspan = rowspan || 1;
  59. colspan = colspan || 1;
  60. ranges.push({ s: { r: R, c: outRow.length }, e: { r: R + rowspan - 1, c: outRow.length + colspan - 1 } });
  61. }
  62. ;
  63. //Handle Value
  64. outRow.push(cellValue !== "" ? cellValue : null);
  65. //Handle Colspan
  66. if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
  67. }
  68. out.push(outRow);
  69. }
  70. return [out, ranges];
  71. };
  72. function datenum(v, date1904) {
  73. if (date1904) v += 1462;
  74. var epoch = Date.parse(v);
  75. return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
  76. }
  77. function sheet_from_array_of_arrays(data, opts) {
  78. var ws = {};
  79. var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } };
  80. for (var R = 0; R != data.length; ++R) {
  81. for (var C = 0; C != data[R].length; ++C) {
  82. if (range.s.r > R) range.s.r = R;
  83. if (range.s.c > C) range.s.c = C;
  84. if (range.e.r < R) range.e.r = R;
  85. if (range.e.c < C) range.e.c = C;
  86. var cell = { v: data[R][C] };
  87. if (cell.v == null) continue;
  88. var cell_ref = XLSX.utils.encode_cell({ c: C, r: R });
  89. if (typeof cell.v === 'number') cell.t = 'n';
  90. else if (typeof cell.v === 'boolean') cell.t = 'b';
  91. else if (cell.v instanceof Date) {
  92. cell.t = 'n';
  93. cell.z = XLSX.SSF._table[14];
  94. cell.v = datenum(cell.v);
  95. }
  96. else cell.t = 's';
  97. ws[cell_ref] = cell;
  98. }
  99. }
  100. if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
  101. return ws;
  102. }
  103. function Workbook() {
  104. if (!(this instanceof Workbook)) return new Workbook();
  105. this.SheetNames = [];
  106. this.Sheets = {};
  107. }
  108. function s2ab(s) {
  109. var buf = new ArrayBuffer(s.length);
  110. var view = new Uint8Array(buf);
  111. for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  112. return buf;
  113. }
  114. export function export_table_to_excel(id) {
  115. var theTable = document.getElementById(id);
  116. var oo = generateArray(theTable);
  117. var ranges = oo[1];
  118. /* original data */
  119. var data = oo[0];
  120. var ws_name = "SheetJS";
  121. console.log(data);
  122. var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
  123. /* add ranges to worksheet */
  124. // ws['!cols'] = ['apple', 'banan'];
  125. ws['!merges'] = ranges;
  126. /* add worksheet to workbook */
  127. wb.SheetNames.push(ws_name);
  128. wb.Sheets[ws_name] = ws;
  129. var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
  130. saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), "test.xlsx")
  131. ajaxJson("数据加载中", '/market/clickCurrenLog/add', {//导出请求日志接口
  132. "opName": JSON.parse(window.sessionStorage.userInfo).loginNo,
  133. "fileName": "test.xlsx",
  134. "opTime": getNowDate(),
  135. }, function (res) {
  136. console.log(res)
  137. });
  138. }
  139. function formatJson(jsonData) {
  140. console.log(jsonData)
  141. }
  142. export function export_json_to_excel(th, jsonData, defaultTitle, autoWidth = true,
  143. bookType = 'xlsx',
  144. myRowFont = '1') {
  145. /* original data */
  146. console.log('11111')
  147. var data = jsonData;
  148. data.unshift(th);
  149. var ws_name = "SheetJS";
  150. var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
  151. if (autoWidth) {
  152. /*设置worksheet每列的最大宽度*/
  153. const colWidth = data.map(row => row.map(val => {
  154. /*先判断是否为null/undefined*/
  155. if (val == null) {
  156. return {
  157. 'wch': 10
  158. };
  159. }
  160. /*再判断是否为中文*/
  161. else if (val.toString().charCodeAt(0) > 255) {
  162. return {
  163. 'wch': val.toString().length * 2
  164. };
  165. } else {
  166. return {
  167. 'wch': val.toString().length
  168. };
  169. }
  170. }))
  171. /*以第一行为初始值*/
  172. let result = colWidth[0];
  173. for (let i = 1; i < colWidth.length; i++) {
  174. for (let j = 0; j < colWidth[i].length; j++) {
  175. if (result[j]['wch'] < colWidth[i][j]['wch']) {
  176. result[j]['wch'] = colWidth[i][j]['wch'];
  177. }
  178. }
  179. }
  180. ws['!cols'] = result;
  181. }
  182. /* add worksheet to workbook */
  183. wb.SheetNames.push(ws_name);
  184. wb.Sheets[ws_name] = ws;
  185. var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
  186. var title = defaultTitle || '列表'
  187. saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), title + ".xlsx")
  188. ajaxJson("数据加载中", '/market/clickCurrenLog/add', {//导出请求日志接口
  189. "opName": JSON.parse(window.sessionStorage.userInfo).loginNo,
  190. "fileName": title + ".xlsx",
  191. "opTime": getNowDate(),
  192. }, function (res) {
  193. console.log(res)
  194. });
  195. }
  196. function ajaxJson(msg, url, param, callBack, beforeSend, async) {
  197. $.ajax({
  198. type: "POST",
  199. url: url,
  200. global: true,
  201. data: JSON.stringify(param),
  202. contentType: "application/json;charset=UTF-8",
  203. beforeSend: function (req) {
  204. req.setRequestHeader("agileauthtoken", JSON.parse(window.sessionStorage.agileauthtoken).replace(/"/g, ''));
  205. if ($.isFunction(beforeSend)) {
  206. beforeSend.call(this, req);
  207. }
  208. },
  209. xhrFields: {
  210. withCredentials: false //跨域session保持
  211. },
  212. async: async == undefined ? true : async,
  213. dataType: "json",
  214. success: function (page) {
  215. },
  216. error: function (xhr, textStatus, errorThrow) {
  217. }
  218. });
  219. }