如果值临时单元格>值源单元格,则将值设置为单元格(按数组处理多个单元格)



我有多张具有相同格式(页眉(的纸张。

  • Cost_Tmp:通过数组形式函数从原始数据计算成本

  • 成本:如果Cost_tmp更改并且>成本,然后我想将值从Cost_Tmp复制到成本。

  • 我有多页,所以我会使用数组来加快脚本处理

  • 列索引可以更改->我想用列标题来指代列。

  • 我写了这段代码来做到这一点,但它不起作用(复制函数起作用,但如果函数不起作用的话(。我不知道如何比较数组的2个对象值。问题是如果功能低于

  • 如果(data[i][Cost_Tmp_col]>data[i][Cost_col].toString(((

  • 以下是示例表:谷歌测试表

function updateCost() {
var mysheetname = ["RETAIL_ORDER","SEA FOOD_ORDER","HAMPER_ORDER","GARDEN_ORDER"];
for(var j = 0;j < mysheetname.length;j++)
{
var sheet = SpreadsheetApp.getActive().getSheetByName(mysheetname[j]);
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
var Cost_col = headers.indexOf('Cost');
var Cost_Tmp_col = headers.indexOf('Cost_Tmp');
var dataRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mysheetname[j])
.getDataRange();
var CostRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mysheetname[j])
.getRange(1,Cost_col+1,sheet.getLastRow(),1);
var data = dataRange.getValues();
var newData = []
for (var i = 0; i < data.length; i++) {
var cost_tmp_val = data[i][Cost_Tmp_col];
if (data[i][Cost_Tmp_col] > data[i][Cost_col].toString()) {
data[i][Cost_col] = data[i][Cost_Tmp_col].toString();
}
newData.push(new Array(data[i][Cost_col]));

}
CostRange.setValues(newData);
}
}

问题:

  • 您想要比较两个数字,但(至少(比较中的一个项目是字符串data[i][Cost_col].toString()。如果要比较数字,请不要使用toString((
  • 仅当满足条件时,才将值推送到newData,而希望填充所有Cost列(而不仅仅是必须更新的行(
  • 构造函数new Array(number)将创建一个具有数字长度的空数组。这不是你想要实现的

解决方案:

  • 如果要比较数字,请不要使用toString((
  • 检索对应于CostRange的值并修改这些值,而不是通过newData创建新的数组

代码示例:

function updateCost() {
var mysheetname = ["RETAIL_ORDER","SEA FOOD_ORDER","HAMPER_ORDER","GARDEN_ORDER"];
for(var j = 0;j < mysheetname.length;j++)  {
var sheetname = mysheetname[j];
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetname);
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
var Cost_col = headers.indexOf('Cost') + 1;
var Cost_Tmp_col = headers.indexOf('Cost_Tmp') + 1;
var dataRange = sheet.getDataRange();
var CostRange = sheet.getRange(1,Cost_col,sheet.getLastRow(),1);
var costValues = CostRange.getValues();
var data = dataRange.getValues();
for (var i = 1; i < data.length; i++) {
var rowData = data[i];
var costTemp = rowData[Cost_Tmp_col - 1];
if (costTemp > rowData[Cost_col - 1]) {
costValues[i] = [costTemp];
}
}
CostRange.setValues(costValues);
}
}

注:

  • 为了避免重复任务(例如多次访问SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mysheetname[j])data[i](,我修改了您的脚本
  • 我假设在编辑电子表格时触发它不是问题,而只是让脚本执行适当的操作。如果您需要帮助,请查看onEdit

最新更新