Export2Excel.js 4.3 KB

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