excel.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. var XLSX = require('xlsx')
  2. // 读取本地excel文件
  3. function readWorkbookFromLocalFile(file, callback) {
  4. var reader = new FileReader();
  5. reader.onload = function (e) {
  6. var data = e.target.result;
  7. var workbook = XLSX.read(data, { type: 'binary' });
  8. if (callback) callback(workbook);
  9. };
  10. reader.readAsBinaryString(file);
  11. }
  12. /**
  13. * 通用的打开下载对话框方法,没有测试过具体兼容性
  14. * @param url 下载地址,也可以是一个blob对象,必选
  15. * @param saveName 保存文件名,可选
  16. */
  17. function openDownloadDialog(url, saveName) {
  18. if (typeof url == 'object' && url instanceof Blob) {
  19. url = URL.createObjectURL(url); // 创建blob地址
  20. }
  21. var aLink = document.createElement('a');
  22. aLink.href = url;
  23. aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
  24. var event;
  25. if (window.MouseEvent) event = new MouseEvent('click');
  26. else {
  27. event = document.createEvent('MouseEvents');
  28. event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  29. }
  30. aLink.dispatchEvent(event);
  31. }
  32. // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
  33. function sheet2blob(sheet, sheetName) {
  34. sheetName = sheetName || 'sheet1';
  35. var workbook = {
  36. SheetNames: [sheetName],
  37. Sheets: {}
  38. };
  39. workbook.Sheets[sheetName] = sheet;
  40. // 生成excel的配置项
  41. var wopts = {
  42. bookType: 'xlsx', // 要生成的文件类型
  43. bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
  44. type: 'binary'
  45. };
  46. var wbout = XLSX.write(workbook, wopts);
  47. var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" });
  48. // 字符串转ArrayBuffer
  49. function s2ab(s) {
  50. var buf = new ArrayBuffer(s.length);
  51. var view = new Uint8Array(buf);
  52. for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  53. return buf;
  54. }
  55. return blob;
  56. }
  57. function exportSpecialExcel() {
  58. var aoa = [
  59. ['扣款方id', '扣款方姓名', '收款方id', '收款方姓名', '调整款金额(元)'],
  60. // ['A1', '张三', 'A2', '李四', 100],
  61. ];
  62. var sheet = XLSX.utils.aoa_to_sheet(aoa);
  63. var wscols = [
  64. { wch: 20 },
  65. { wch: 20 },
  66. { wch: 20 },
  67. { wch: 20 },
  68. { wch: 20 }
  69. ];
  70. sheet['!cols'] = wscols;
  71. openDownloadDialog(sheet2blob(sheet), '调整款模板.xlsx');
  72. }
  73. function exportExcel(data,colSetting,fileName){
  74. var aoa = [
  75. ...data
  76. ];
  77. var sheet = XLSX.utils.aoa_to_sheet(aoa);
  78. var wscols = [
  79. ...colSetting
  80. ];
  81. sheet['!cols'] = wscols;
  82. openDownloadDialog(sheet2blob(sheet), fileName+'.xlsx');
  83. }
  84. function readWorkbook2(workbook) {
  85. var sheetNames = workbook.SheetNames; // 工作表名称集合
  86. var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
  87. var csv = XLSX.utils.sheet_to_csv(worksheet);
  88. let getTabelData = csv2table(csv)
  89. }
  90. function csv2table(csv){
  91. let array = [];
  92. var rows = csv.split('\n');
  93. rows.pop(); // 最后一行没用的
  94. rows.forEach(function(row, idx) {
  95. var columns = row.split(',');
  96. if(idx > 0){
  97. let params = {
  98. c_merchant_id:columns[0],
  99. charge_name:columns[1],
  100. r_merchant_id:columns[2],
  101. receive_name:columns[3],
  102. adjust_cash:columns[4],
  103. }
  104. array.push(params)
  105. }
  106. })
  107. return array
  108. }
  109. export const downloadFile = exportSpecialExcel
  110. export const loadFile = readWorkbookFromLocalFile
  111. export const readWorkbook = readWorkbook2
  112. export const exportExcelFile = exportExcel