【发布时间】:2020-01-09 05:57:44
【问题描述】:
第一次在这里发布海报。我想了解一些我认为可以修饰一下的 Google App Script 代码。
长话短说。
我有 2 个 Google Sheet 表格
“LOCALE”电子表格 - 列出位置的唯一名称
“FEED”电子表格 - 列出照片说明,包括位置。此电子表格中多次列出同一地点。
这两个表都有一个“Location”列,通过Key相互引用strong> 列。
我要解决的问题:
当我在“LOCALE”电子表格中编辑地点名称时,它应该会自动更新“FEED”电子表格中的所有地点名称。
我解决这个问题的方法:
为此,我在 for 循环中使用了 for 循环。总结一下:
- 对于“LOCALE”中的每一行...
- ..遍历“FEED”中的每一行...
- ...如果 FEED 表中 Key 列中的值与 表中 Key 列中的值匹配LOCALE 工作表...
- ...但是 FEED 表中 Location 列中的值与表中 Location 列中的值不匹配LOCALE 表格...
- ...用 LOCALELocation 列中的值更新 FEED 表中的 Location 列em> 工作表。
如果你还不明白,下面是我为它写的代码:
// for each row in the "Locale" sheet...
for(var L = LocationsRefValues.length-1;L>=0;L--) {
// for each row in the "Feed" sheet...
for(var F = FeedRefValues.length-1;F>=0;F--) {
if (FeedRefValues[F][97] == LocationsRefValues[L][17] &&
FeedRefValues[F][10] != LocationsRefValues[L][1]) {
FeedDataSheet.getRange(F+2,10+1).setValue(LocationsRefValues[L][1]);
}
}
}
现在,这段代码运行良好,我没有遇到任何问题。但是,我觉得这有点笨拙,因为完成编辑需要一段时间。我确信有更简单的方法来编写和运行这段代码。我听说数组可以解决这种情况,但我不知道该怎么做。因此,我为什么要寻求帮助。有人可以帮忙吗?
请记住,我是一个完全的 Google App Script 初学者,完全是靠运气才得到这段代码的,所以解决方案越简单越好。感谢您提前考虑我的问题。期待大家的来信。
这是完整的功能(在我在这里建议进行编辑之后。)
function ModeratorStatus() {
var Data = SpreadsheetApp.getActiveSpreadsheet(); // Local Spreadsheet
var ModeratorStatusDataSheet = Data.getSheetByName("The Status (Moderators)");
var ModeratorStatusRange = ModeratorStatusDataSheet.getRange("A2:C");
var ModeratorStatusRefValues = ModeratorStatusRange.getValues();
var ModeratorDataSheet = Data.getSheetByName("The Moderator_Numbers"); // DATA "Member" sheet
//var ModeratorRefValues = ModeratorDataSheet.getRange("A2:AD").getValues();
var ModeratorStatusObj = {};
for (var MOS = ModeratorStatusRefValues.length-1; MOS>=0; MOS--) {
ModeratorStatusObj[ModeratorStatusRefValues[MOS][2]] = ModeratorStatusRefValues[MOS][0];
}
var ModeratorValues = ModeratorDataSheet.getRange("A1:AD").getValues();
for (var MO = ModeratorValues.length-1; MO >=0; MO--) { // for each row in the "Moderator" sheet...
var ModeratorVal28 = ModeratorValues[MO][28];
if (ModeratorStatusObj[ModeratorVal28] != ModeratorValues[MO][1]) {
ModeratorValues[MO][1] = ModeratorStatusObj[ModeratorVal28];
}
}
var destinationRange = ModeratorDataSheet.getRange(1, 1, ModeratorValues.length, ModeratorValues[0].length);
destinationRange.setValues(ModeratorValues);
我在不同的函数中使用了代码作为测试。为了方便
语言环境 = 版主状态
饲料 = 版主
【问题讨论】:
-
for(var C =,是不是打错字了,你是说for(var L =吗? -
您考虑过使用查找和替换吗? stackoverflow.com/questions/26480857/…
-
是的,那是在我的复制/粘贴过程中。谢谢! @CertainPerformance
-
ModeratorValues[MO + 2][1 + 1]:这是什么意思?数组从 0 开始,不需要偏移量:ModeratorValues[MO][1 + 1] -
不要不断地使用新代码编辑问题以尝试获得解决不同错误的帮助。如果其中一个答案为原始问题提供了有用的解决方案,请接受它,然后ask a new, good question(并在其中引用这个)。
标签: javascript arrays for-loop google-apps-script google-sheets