({ readFile: function (component, helper, file) { if (!file) return; if (!file.name.match(/\.(csv||CSV)$/)) { return alert('only support csv files'); } else { reader = new FileReader(); reader.onerror = function errorHandler(evt) { switch (evt.target.error.code) { case evt.target.error.NOT_FOUND_ERR: alert('File Not Found!'); break; case evt.target.error.NOT_READABLE_ERR: alert('File is not readable'); break; case evt.target.error.ABORT_ERR: break; // noop default: alert('An error occurred reading this file.'); } }; reader.onabort = function (e) { alert('File read cancelled'); }; reader.onloadstart = function (e) { var output = '
  • ' + file.name + ' (' + file.type + ')- ' + file.size + 'bytes, last modified: ' + file.lastModifiedDate.toLocaleDateString() + '
  • '; component.set('v.filename', file.name); component.set('v.TargetFileName', output); }; reader.onload = function (e) { var data = e.target.result; // data.replace(/\n/,"") var allTextLines11 = data.split(/\r/); var s = allTextLines11.toString(); component.set('v.fileContentData', s); console.log('file dataqqq' + JSON.stringify(s)); var allTextLines = data.split(/\r\n|\n/); var dataRows = allTextLines.length - 1; var headers = allTextLines[0].split(','); var numOfRows = component.get('v.NumOfRecords'); if ( dataRows > numOfRows + 1 || dataRows == 1 || dataRows == 0 ) { alert('File Rows between 1 to ' + numOfRows + ' .'); component.set('v.showMain', true); } else { var lines = []; var filecontentdata; var content = ''; content += ''; content += ''; for (i = 0; i < headers.length; i++) { content += ''; } content += ''; for (var i = 1; i < allTextLines.length; i++) { filecontentdata = allTextLines[i].split(','); if (filecontentdata[0] != '') { content += ''; content += ''; for (var j = 0; j < filecontentdata.length; j++) { content += ''; } content += ''; } } content += '
    ' + '行号' + '' + headers[i] + '
    ' + i + '' + filecontentdata[j] + '
    '; console.log(content); component.set('v.TableContent', content); component.set('v.showMain', false); } }; reader.readAsText(file, 'gb2312'); } var reader = new FileReader(); reader.onloadend = function () {}; reader.readAsDataURL(file); }, isNumber: function(str) { return /^\d+$/.test(str); }, saveRecords: function (component, event, helper) { component.set('v.login', true); var action = component.get('c.processData'); var fieldsList = ['Name', 'Phone', 'AccountNumber']; //Please write your code dynamic fields action.setParams({ fileData: component.get('v.fileContentData'), sobjectName: 'Account', //Any object fields: fieldsList }); action.setCallback(this, function (response) { var state = response.getState(); if (state === 'SUCCESS') { var res = response.getReturnValue(); var res1 = ''; if (res != 'success') { var ress = res.split('='); console.log(ress); let errorDatas = []; let errorDataRow = []; debugger; for (var i = 0; i < ress.length; i++) { res1 += ress[i].substr(7) + '\n'; if (ress[i] != '') { <<<<<<< HEAD let errorData = {}; let index = errorDataRow.indexOf( ress[i].substr(7).substring(1, 2) ); ======= let errorData = {} if(!this.isNumber(ress[i].substr(7).substring(1, 2))){ continue } let index = errorDataRow.indexOf(ress[i].substr(7).substring(1, 2)); >>>>>>> LEXCommunityLiJun if (index == -1) { errorData.errorRow = ress[i] .substr(7) .substring(1, 2); errorDataRow.push(errorData.errorRow); <<<<<<< HEAD errorData.errorInfo = ress[i] .substr(7) .substring(6); errorDatas.push(errorData); } else { errorDatas[index].errorInfo += '; ' + ress[i].substr(7).substring(6); ======= errorData.errorInfo = ress[i].substr(7).substring(5); errorDatas.push(errorData); } else { errorDatas[index].errorInfo += '; ' + ress[i].substr(7).substring(5); >>>>>>> LEXCommunityLiJun } } } var fileContentData = component .get('v.fileContentData') .split('\n'); let errorColumns = [ <<<<<<< HEAD { label: '错误行', fieldName: 'errorRow', type: 'text', hideDefaultActions: true, initialWidth: 50 }, { label: '错误信息', fieldName: 'errorInfo', type: 'text', hideDefaultActions: true, initialWidth: 300, wrapText: true } ======= { label: '错误行', fieldName: 'errorRow', type: 'text', hideDefaultActions: true, initialWidth: 100 }, { label: '错误信息', fieldName: 'errorInfo', type: 'text', hideDefaultActions: true,initialWidth: 300,wrapText: true } >>>>>>> LEXCommunityLiJun ]; for ( var i = 0; i < fileContentData[0].split(',').length - 1; i++ ) { errorColumns.push({ <<<<<<< HEAD label: fileContentData[0].split(',')[i], fieldName: 'field' + i, type: 'text', hideDefaultActions: true, wrapText: true ======= label: fileContentData[0].split(',')[i], fieldName: 'field' + i, type: 'text', hideDefaultActions: true, wrapText: true, initialWidth: 120 >>>>>>> LEXCommunityLiJun }); } for (var i = 0; i < errorDatas.length; i++) { let data = fileContentData[errorDatas[i].errorRow]; console.log('data = ' + JSON.stringify(data)); <<<<<<< HEAD for (var j = 0; j < data.split(',').length; j++) { let label = 'field' + j; errorDatas[i][label] = data.split(',')[j]; ======= if(data){ for(var j = 0; j < data.split(',').length; j++){ let label = 'field' + j; errorDatas[i][label] = data.split(',')[j]; } >>>>>>> LEXCommunityLiJun } } console.log('errorDatas = ' + JSON.stringify(errorDatas)); component.set('v.errorColumns', errorColumns); component.set('v.errorData', errorDatas); component.set('v.showErrorInfo', true); console.log('==' + res1); // this.error( "请修改后重新上传"); component.set('v.errorMessage', res1 + '请修改后重新上传'); this.showErrorToast(component); component.set('v.login', false); component.find('save_con').set('v.disabled', true); } else { // this.success('导入成功'); component.set('v.successMessage', '导入成功'); this.showSuccessToast01(component); component.set('v.showMain', true); component.set('v.login', false); component.find('save_con').set('v.disabled', false); } } else if (state === 'INCOMPLETE') { component.set('v.login', false); } else if (state === 'ERROR') { var errors = response.getError(); if (errors) { if (errors[0] && errors[0].message) { console.log('Error message: ' + errors[0].message); let errorDatas = [ { errorRow: '1', errorInfo: errors[0].message } ]; let errorColumns = [ { label: '错误行', fieldName: 'errorRow', type: 'text', hideDefaultActions: true, initialWidth: 50 }, { label: '错误信息', fieldName: 'errorInfo', type: 'text', hideDefaultActions: true, initialWidth: 300, wrapText: true } ]; component.set('v.errorData', errorDatas); component.set('v.errorColumns', errorColumns); component.set('v.showErrorInfo', true); component.set('v.login', false); } } else { console.log('Unknown error'); component.set('v.login', false); } } }); $A.enqueueAction(action); }, //弹出 成功提示 showSuccessToast01: function (component) { $A.util.removeClass(component.find('successDiv01'), 'slds-hide'); window.setTimeout( $A.getCallback(function () { $A.util.addClass(component.find('successDiv01'), 'slds-hide'); }), 3000 ); }, //弹出 错误提示 showErrorToast: function (component) { $A.util.removeClass(component.find('errorDiv'), 'slds-hide'); <<<<<<< HEAD window.setTimeout( $A.getCallback(function () { $A.util.addClass(component.find('errorDiv'), 'slds-hide'); }), 4000 ======= window.setTimeout($A.getCallback(function () { $A.util.addClass(component.find('errorDiv'), 'slds-hide'); }), 7000 >>>>>>> LEXCommunityLiJun ); }, success: function (message) { var toastEvent = $A.get('e.force:showToast'); toastEvent.setParams({ title: '成功!', message: message, duration: '5000' }); toastEvent.fire(); }, warning: function (message) { var toastEvent = $A.get('e.force:showToast'); toastEvent.setParams({ title: '警告!', message: message, duration: '10000' }); toastEvent.fire(); }, error: function (message) { var toastEvent = $A.get('e.force:showToast'); toastEvent.setParams({ title: '错误!', message: message, duration: 'sticky' }); toastEvent.fire(); }, //zhj 导出错误信息 2023-05-16 start exportErrorInfoHelper: function (component) { var errorData = component.get('v.errorData'); var errorColumns = component.get('v.errorColumns'); var datas = []; let errorColumnsArray = []; for (var i in errorColumns) { errorColumnsArray.push(errorColumns[i].label); } datas.push(errorColumnsArray); //datas.push(errorColumns); for (var i in errorData) { let data = []; data.push(errorData[i].errorRow); data.push(errorData[i].errorInfo); for (var j = 0; j < Object.keys(errorData[i]).length - 2; j++) { data.push(errorData[i]['field' + j]); } datas.push(data); } console.log('datas = ' + JSON.stringify(datas)); var csv = this.convertToCSV(component, datas); console.log('csv = ' + JSON.stringify(csv)); this.downloadCSV(component, csv); }, convertToCSV: function (component, data) { console.log('enter convertToCSV'); console.log('data = ' + data); var csv = ''; for (var i = 0; i < data.length; i++) { var row = data[i]; console.log('row = ' + JSON.stringify(row)); for (var j = 0; j < row.length; j++) { var val = ''; val = row[j] === null ? '' : row[j].toString(); console.log('val = ' + val); if ( val.indexOf(',') !== -1 || val.indexOf('"') !== -1 || val.indexOf('\n') !== -1 ) { //val = '"' + val.replace(/"/g,'""') + '"'; } if (j > 0) { csv += ','; } csv += val; } csv += '\n'; } return csv; }, downloadCSV: function (component, csv) { var link = document.createElement('a'); // 设置字符集和文件头 <<<<<<< HEAD let bom = '\uFEFF'; link.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(bom + csv); ======= var bom = "\uFEFF"; link.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(bom + csv); //link.href = URL.createObjectURL(csvFile); >>>>>>> LEXCommunityLiJun link.download = 'data.csv'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } //zhj 导出错误信息 2023-05-16 end });