【发布时间】:2020-01-21 07:08:37
【问题描述】:
我的情况类似于this question 中的情况,我试图在提交表单时将用户人口统计数据映射到响应表。该解决方案在所有情况下都能正常工作。每当其中一个用户 ID 与名册上可用的 ID 不对应时,它就会跳过该行并继续前进到下一行。
当我尝试修改代码以包含更多列时遇到了问题(我也想扫描并将列 I 从“名册表”映射到“响应表”中)。这是原来的解决方案:
function extractId() {
var responsesSheet = SpreadsheetApp.openById('XXXXXXX').getSheetByName('Sheet1');
var rosterSheet = SpreadsheetApp.openById('XXXXXXX').getSheetByName('Sheet1');
var valuesOfresponsesSheet = responsesSheet.getRange(2, 2, responsesSheet.getLastRow() - 1, 1).getValues();
var valuesOfrosterSheet = rosterSheet.getRange(2, 1, rosterSheet.getLastRow() - 1, 8).getValues();
var obj = valuesOfrosterSheet.reduce(function(o, e) {
o[e[0]] = [e[0], e[1], e[5], e[6], e[7]];
return o;
}, {});
// var resultValues = valuesOfresponsesSheet.map(function(e) {return obj[e[0].replace(/\@(.*)/i,"")]});
var resultValues = valuesOfresponsesSheet.map(function(e) {return obj[e[0].toString().replace(/\@(.*)/i,"")] || ["","","","",""]}); // Modified
responsesSheet.getRange(2, 3, resultValues.length, resultValues[0].length).setValues(resultValues);
}
这就是我修改它的方式:
function extractId() {
var responsesSheet = SpreadsheetApp.openById('1bDtDMkWDosKsf0EDV08VY-pzE8Okr5kqQU0vnNps6mo').getSheetByName('Form Responses 1');
var rosterSheet = SpreadsheetApp.openById('196JpI3cvJZOynhqL0kyBoxqXap9NtykBG5RvCPtl7dA').getSheetByName('Sheet1');
var valuesOfresponsesSheet = responsesSheet.getRange(2, 2, responsesSheet.getLastRow() - 1, 1).getValues();
var valuesOfrosterSheet = rosterSheet.getRange(2, 1, rosterSheet.getLastRow() - 1, 9).getValues();
var obj = valuesOfrosterSheet.reduce(function(o, e) {
o[e[0]] = [e[0], e[1], e[5], e[6], e[7], e[8]];
return o;
}, {});
// var resultValues = valuesOfresponsesSheet.map(function(e) {return obj[e[0].replace(/\@(.*)/i,"")]});
var resultValues = valuesOfresponsesSheet.map(function(e) {return obj[e[0].toString().replace(/\@(.*)/i,"")] || ["","","","",""]}); // Modified
responsesSheet.getRange(2, 3, resultValues.length, resultValues[0].length).setValues(resultValues);
}
我遇到的问题是,只要没有 ID 匹配(即,如果“响应表”的 B 列与“名册表”中 A 列的一项不匹配),我就会得到以下错误:The number of columns in the data does not match the number of columns in the range. The data has 5 but the range has 6. (line 14, file "Code")。代码在不匹配的 ID 恰好位于的那一行停止工作。
我想要的是,如果没有 ID 匹配的代码只是继续下一行。
【问题讨论】:
标签: google-apps-script google-sheets