如何用JavaScript实现Excel数据批量粘贴填充Salesforce多输入字段
Salesforce 3列不定行数据批量录入脚本适配方案
适配修改核心逻辑
- 移除旧版本适配其他模块的动态列数检测,固定按3列规则解析粘贴数据
- 优化数据分隔逻辑,同时兼容Excel复制默认的制表符、空格两种分隔格式,避免粘贴数据识别失败
- 适配不定行需求,自动匹配页面现有输入行数量与粘贴数据行数,超出页面输入行的数据自动截断,不足则保留剩余单元格为空
- 保留原有可拖拽弹窗、行列数实时预览功能,降低团队成员使用成本
完整可直接使用的脚本
javascript:$e = $('<div id="forecastValuesDiv">'+ '<strong>财务数据批量录入</strong>'+ '<br /><br />请粘贴从Excel复制的3列数据,行数无限制<br /><br />'+ '无需提前选中输入框<br /><br />'+ '<textarea id="forecastValues" rows="15" cols="60"></textarea>'+ '<br /><br /><strong>检测信息:</strong><br />'+ '<span id="detectedValuesText" style="color:red"></span><br />'+ '<button type="button" id="submitForecastValues">录入数据</button> '+ '<button type="button" id="closeForecastValues">关闭</button>'+ '</div>'); $('body').append($e); $e.css({ position: 'absolute', top: '150px', right: '10px', width: '400px', height: '450px', backgroundColor: 'white', "border": "solid 3px #096", "z-index": '1000', "padding": "5px", "text-align": "center"}); if(typeof $e.draggable === 'function') $e.draggable(); var inputRows = 0, inputColumns = 0, valueRows = 0, valueColumns = 0; // 自动检测页面输入行列 function detectInputGrid(){ var dataTableRows = $(".list.dataTable tbody").children(); if(dataTableRows.length>0){ var dataTableCells = $(dataTableRows[0]).find("input:visible"); inputRows = dataTableRows.length; inputColumns = dataTableCells.length; }else{ inputRows = 0; inputColumns = 0; } updateDetectedInput(); } $("#forecastValues").on('input',function(e){ detectInputGrid(); var textAreaValue = $("textarea#forecastValues").val().trim(); valueRows = 0; valueColumns = 0; if( textAreaValue.length > 0 ){ var rows = textAreaValue.split(/[\r\n]+/g); valueRows = rows.length; if( valueRows > 0 ){ // 兼容制表符和空格分隔 valueColumns = rows[0].trim().split(/[\s\t]+/g).length; } } updateDetectedInput(); }); function updateDetectedInput(){ var tips = "页面输入框:" + inputRows + " 行 × " + inputColumns + " 列<br />粘贴数据:" + valueRows + " 行 × " + valueColumns + " 列<br/>"; if(valueColumns>0 && valueColumns!=3){ tips += "<br/>⚠️ 粘贴数据列数不是3列,请检查后重新粘贴"; } $("#detectedValuesText").html(tips); }; $("#submitForecastValues").click(function(){ detectInputGrid(); if(valueColumns!=3){ alert("粘贴数据列数不符合3列要求,请调整后再提交"); return; } var dataTableRows = $(".list.dataTable tbody").children(); var yearValues = $("textarea#forecastValues").val().trim().split(/[\r\n]+/g); var validRowCount = Math.min(dataTableRows.length, yearValues.length); for (var i = 0; i < validRowCount; i++){ var dataTableCells = $(dataTableRows[i]).find("input:visible"); var rowValues = yearValues[i].trim().split(/[\s\t]+/g); var validColCount = Math.min(3, dataTableCells.length); for(var j = 0; j < validColCount ; j++){ if(rowValues[j] !== undefined){ dataTableCells[j].value = rowValues[j]; } } } alert("数据填充完成,共填充"+validRowCount+"行数据"); }); $("#closeForecastValues").click(function(){ $e.remove(); }); detectInputGrid();
使用说明
- 将上述完整代码复制,新建浏览器书签,把代码粘贴到书签的「URL」输入框中,命名为「Salesforce批量录入」即可
- 打开Salesforce对应数据录入页面,点击刚才新建的书签即可弹出录入窗口
- 从Excel中选中需要录入的3列数据直接复制,粘贴到弹窗的文本框中
- 确认弹窗提示的行列数符合要求后,点击「录入数据」按钮即可自动填充所有对应单元格
注意:如果脚本无法识别到页面的输入表格,请将代码中两处$(".list.dataTable tbody")替换为当前Salesforce录入页面对应表格tbody的CSS选择器即可
内容的提问来源于stack exchange,提问作者DazTimm
相关产品推荐
相关产品推荐

