Arrays 将Google工作表中的多个值与循环的应用程序脚本进行比较
我想比较Google Sheet电子表格中的多个值,其中一些用于Google应用程序脚本中的循环。但是我想听听关于最好的方法的建议 下面解释一下 我有两张电子表格,一张“食物”表和一张“食物组”表 我写了一个for循环脚本,它贯穿了整个食物表 如果两个表的键值都匹配,脚本将用食物组表中的一列更新食物表中的一列 该脚本工作正常。但它一次只能比较两个表之间的一列。我想修改此脚本,以便可以一次比较多个列,而无需为每个指定列创建for循环 我把代码贴在下面。如果您需要,我还可以提供电子表格的图像 在任何情况下,我对编码都是新手,所以任何有建设性的反馈或洞察都会对我的脚本有所帮助。如果有什么不清楚的地方,我很乐意回答任何问题Arrays 将Google工作表中的多个值与循环的应用程序脚本进行比较,arrays,object,for-loop,google-apps-script,google-sheets,Arrays,Object,For Loop,Google Apps Script,Google Sheets,我想比较Google Sheet电子表格中的多个值,其中一些用于Google应用程序脚本中的循环。但是我想听听关于最好的方法的建议 下面解释一下 我有两张电子表格,一张“食物”表和一张“食物组”表 我写了一个for循环脚本,它贯穿了整个食物表 如果两个表的键值都匹配,脚本将用食物组表中的一列更新食物表中的一列 该脚本工作正常。但它一次只能比较两个表之间的一列。我想修改此脚本,以便可以一次比较多个列,而无需为每个指定列创建for循环 我把代码贴在下面。如果您需要,我还可以提供电子表格的图像 在任何
function FoodGroup_Test() {
var Data = SpreadsheetApp.getActiveSpreadsheet();
var FoodGroupDataSheet = Data.getSheetByName("Food Groups") // "FoodGroup" sheet
var FoodGroupAllValues = FoodGroupDataSheet.getRange(2, 1, FoodGroupDataSheet.getLastRow()-1,FoodGroupDataSheet.getLastColumn()).getValues();
var FoodGroupDataLastRow = FoodGroupDataSheet.getLastRow();
var FoodDataSheet = Data.getSheetByName("Food") // "Food" sheet
var FoodAllValues = FoodDataSheet.getRange(2, 1, FoodDataSheet.getLastRow()-1,FoodDataSheet.getLastColumn()).getValues();
// Object to contain all FoodGroup column values
var Object = {};
for(var FO = FoodGroupAllValues.length-1;FO>=0;FO--) // for each row in the "FoodGroup" sheet...
{
Object[FoodGroupAllValues[FO][15]] = FoodGroupAllValues[FO][11]; // ...store FoodGroup ID Key value
}
for(var F = FoodAllValues.length-1;F>=0;F--) // for each row in the "Food" sheet...
{
var Food_FoodGroupKey = FoodAllValues[F][94]; // Store FoodGroup Key value.
// ...if the Food value dont match, update it with FoodGroup's value
if (Object[Food_FoodGroupKey] != FoodAllValues[F][95])
{
FoodAllValues[F][95] = Object[Food_FoodGroupKey];
}
}
// declare range to place updated values, then set it.
var FoodDestinationRange = FoodDataSheet.getRange(2, 1, FoodAllValues.length, FoodAllValues[0].length);
FoodDestinationRange.setValues(FoodAllValues);
}
为了使代码按预期工作,您应该对代码进行以下更改:
未定义的问题,请使用以下代码行:
为什么你要用一个脚本来做这件事,而不是虚报价值?@J.G.出于各种原因,实际上太多了,无法全部列出。但其中一个主要问题是,我正在使用第三方应用程序在电子表格中输入数据。带有外部公式的电子表格会影响应用程序的性能。另外,根据我的经验,应用程序脚本的性能更可靠。你只需要添加一个“and”条件。类似于:
Object[Food\u FoodGroupKey]!=食品价值[F][95]&&object2[]!=FAllValues[F][86])
Hey@Neo,你介意也分享一份你的工作表吗?干杯@ale13在帖子中添加了我的电子表格截图。希望能有帮助。如果没有问题,请告诉我。我算出了第二部分,并且已经在代码中添加了它(参见前面的注释)。我将添加第一部分。您介意我问一下“object2[]”如何影响“if”条件吗?
Object[Food_FoodGroupKey] != FoodAllValues[F][95] && object2[] != FAllValues[F][86])
FoodDataSheet.createTextFinder("undefined").replaceAllWith("");