Export2Excel.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /* eslint-disable */
  2. require('script-loader!file-saver');
  3. require('script-loader!./Blob');
  4. require('script-loader!xlsx/dist/xlsx.core.min');
  5. function generateArray(table) {
  6. var out = [];
  7. var rows = table.querySelectorAll('tr');
  8. var ranges = [];
  9. for (var R = 0; R < rows.length; ++R) {
  10. var outRow = [];
  11. var row = rows[R];
  12. var columns = row.querySelectorAll('td');
  13. for (var C = 0; C < columns.length; ++C) {
  14. var cell = columns[C];
  15. var colspan = cell.getAttribute('colspan');
  16. var rowspan = cell.getAttribute('rowspan');
  17. var cellValue = cell.innerText;
  18. if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
  19. //Skip ranges
  20. ranges.forEach(function (range) {
  21. if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
  22. for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
  23. }
  24. });
  25. //Handle Row Span
  26. if (rowspan || colspan) {
  27. rowspan = rowspan || 1;
  28. colspan = colspan || 1;
  29. ranges.push({
  30. s: {
  31. r: R,
  32. c: outRow.length
  33. },
  34. e: {
  35. r: R + rowspan - 1,
  36. c: outRow.length + colspan - 1
  37. }
  38. });
  39. };
  40. //Handle Value
  41. outRow.push(cellValue !== "" ? cellValue : null);
  42. //Handle Colspan
  43. if (colspan)
  44. for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
  45. }
  46. out.push(outRow);
  47. }
  48. return [out, ranges];
  49. };
  50. function datenum(v, date1904) {
  51. if (date1904) v += 1462;
  52. var epoch = Date.parse(v);
  53. return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
  54. }
  55. function sheet_from_array_of_arrays(data, opts) {
  56. var ws = {};
  57. var range = {
  58. s: {
  59. c: 10000000,
  60. r: 10000000
  61. },
  62. e: {
  63. c: 0,
  64. r: 0
  65. }
  66. };
  67. for (var R = 0; R != data.length; ++R) {
  68. for (var C = 0; C != data[R].length; ++C) {
  69. if (range.s.r > R) range.s.r = R;
  70. if (range.s.c > C) range.s.c = C;
  71. if (range.e.r < R) range.e.r = R;
  72. if (range.e.c < C) range.e.c = C;
  73. var cell = {
  74. v: data[R][C]
  75. };
  76. if (cell.v == null) continue;
  77. var cell_ref = XLSX.utils.encode_cell({
  78. c: C,
  79. r: R
  80. });
  81. if (typeof cell.v === 'number') cell.t = 'n';
  82. else if (typeof cell.v === 'boolean') cell.t = 'b';
  83. else if (cell.v instanceof Date) {
  84. cell.t = 'n';
  85. cell.z = XLSX.SSF._table[14];
  86. cell.v = datenum(cell.v);
  87. } else cell.t = 's';
  88. ws[cell_ref] = cell;
  89. }
  90. }
  91. if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
  92. return ws;
  93. }
  94. function Workbook() {
  95. if (!(this instanceof Workbook)) return new Workbook();
  96. this.SheetNames = [];
  97. this.Sheets = {};
  98. }
  99. function s2ab(s) {
  100. var buf = new ArrayBuffer(s.length);
  101. var view = new Uint8Array(buf);
  102. for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  103. return buf;
  104. }
  105. export function export_table_to_excel(id) {
  106. var theTable = document.getElementById(id);
  107. console.log('a')
  108. var oo = generateArray(theTable);
  109. var ranges = oo[1];
  110. /* original data */
  111. var data = oo[0];
  112. var ws_name = "SheetJS";
  113. console.log(data);
  114. var wb = new Workbook(),
  115. ws = sheet_from_array_of_arrays(data);
  116. /* add ranges to worksheet */
  117. // ws['!cols'] = ['apple', 'banan'];
  118. ws['!merges'] = ranges;
  119. /* add worksheet to workbook */
  120. wb.SheetNames.push(ws_name);
  121. wb.Sheets[ws_name] = ws;
  122. var wbout = XLSX.write(wb, {
  123. bookType: 'xlsx',
  124. bookSST: false,
  125. type: 'binary'
  126. });
  127. saveAs(new Blob([s2ab(wbout)], {
  128. type: "application/octet-stream"
  129. }), "test.xlsx")
  130. }
  131. function formatJson(jsonData) {
  132. console.log(jsonData)
  133. }
  134. export function export_json_to_excel(th, jsonData, defaultTitle) {
  135. /* original data */
  136. var data = jsonData;
  137. data.unshift(th);
  138. var ws_name = "SheetJS";
  139. var wb = new Workbook(),
  140. ws = sheet_from_array_of_arrays(data);
  141. /* add worksheet to workbook */
  142. wb.SheetNames.push(ws_name);
  143. wb.Sheets[ws_name] = ws;
  144. var wbout = XLSX.write(wb, {
  145. bookType: 'xlsx',
  146. bookSST: false,
  147. type: 'binary'
  148. });
  149. var title = defaultTitle || '列表'
  150. saveAs(new Blob([s2ab(wbout)], {
  151. type: "application/octet-stream"
  152. }), title + ".xlsx")
  153. }