我有两张纸
“会员”表格-600行。
“ MODERATOR”工作表-13行(这是“ MEMBER”工作表的子集)
两个工作表共享一个“成员密钥”列-用于标识成员的所有唯一值。
我想创建一个执行以下操作的函数
“ ...对于成员表中的每一行...”
“ ...比较MODERATOR工作表中的Member Key列。”
“如果“成员密钥”列匹配...”
“ ...从成员表中的特定行中提取值...”
”,并将它们与匹配的KEY列复制到MODERATOR工作表行中”
该代码应该使用其对应的成员记录中的信息来更新主持人记录
我为此编写的代码如下。
代码将运行,但是值不会更新。我认为它与我应用的for循环有关。我希望通过在数组中使用对象函数来解决此问题,但是我很难在代码中应用它们。
感谢您对我的问题或代码的总体反馈
function Moderator_Update() {
var Metrics = SpreadsheetApp.openById("10Wl1B4AtdLHJXBbLbMQbSdtRyAb61biCWYpOQEEywIY"); // METRICS spreadsheet
var Data = SpreadsheetApp.getActiveSpreadsheet(); // DATA spreadsheet
var ModsDataSheet = Data.getSheetByName("The Moderator_Numbers"); // DATA "Member" sheet
var ModsAllValues = ModsDataSheet.getRange(2, 1, ModsDataSheet.getLastRow()-1,ModsDataSheet.getLastColumn()).getValues(); //All values in DATA "Members" sheet
var MembersDataSheet = Data.getSheetByName("The Member_Numbers") // DATA "Moderator" sheet
var MembersAllValues = MembersDataSheet.getRange(2, 1, MembersDataSheet.getLastRow()-1,MembersDataSheet.getLastColumn()).getValues();
for(var MO = ModsAllValues.length-1;MO>=0;MO--) // for each row in the "Moderator" sheet...
{
for(var M = MembersAllValues.length-1;M>=0;M--) // for each row in the "Member" sheet...
{
if (MembersAllValues[M][17] == ModsAllValues[MO][27]) // If Member KEY matches Moderator Key.
{
// delcare the following variables with values from the Member Sheet
var Mod_MemberName = MembersAllValues[M][0];
var Mod_MemberWebPage = MembersAllValues[M][2];
var Mod_MemberTag = MembersAllValues[M][4];
var Mod_MemberFirstName = MembersAllValues[M][5];
var Mod_MemberLastName = MembersAllValues[M][6];
var Mod_MemberEmail = MembersAllValues[M][7];
// assign those values to the following cells in the Moderator Sheet
ModsAllValues[MO][0] = Mod_MemberName;
ModsAllValues[MO][2] = Mod_MemberWebPage;
ModsAllValues[MO][5] = Mod_MemberTag;
ModsAllValues[MO][6] = Mod_MemberFirstName;
ModsAllValues[MO][7] = Mod_MemberLastName;
ModsAllValues[MO][8] = Mod_MemberEmail;
}
}
}
var ModDestinationRange = ModsDataSheet.getRange(2, 1, ModsAllValues.length, ModsAllValues[0].length);
ModDestinationRange.setValues(ModsAllValues);
}
答案 0 :(得分:0)
尝试一下:
这不是最快的解决方案,但是通过这种方式,您不必担心覆盖不属于更新内容的值的影响。
function Moderator_Update() {
var Data=SpreadsheetApp.getActiveSpreadsheet();
var mdsh=Data.getSheetByName("The Moderator_Numbers");
var mdvA=mdsh.getRange(2,1,mdsh.getLastRow()-1,mdsh.getLastColumn()).getValues();
var mrsh=Data.getSheetByName("The Member_Numbers");
var mrvA=mrsh.getRange(2,1,mrsh.getLastRow()-1,mrsh.getLastColumn()).getValues();
var mdkeyA=mdsh.getRange(2,28,mdsh.getLastRow()-1,mdsh.getLastColumn()).getValues().map(function(r){return r[0];});
for(var j=0;j<mrvA.length;j++) {
var i=mdkeyA.indexOf(mrvA[j][17]);
if(i>-1){
mdsh.getRange(i+2,1).setValue(mrvA[j][0]);
mdsh.getRange(i+2,3).setValue(mrvA[j][2]);
mdsh.getRange(i+2,6).setValue(mrvA[j][4]);
mdsh.getRange(i+2,7).setValue(mrvA[j][5]);
mdsh.getRange(i+2,8).setValue(mrvA[j][6]);
mdsh.getRange(i+2,9).setValue(mrvA[j][7]);
}
}
}