首页 > 解决方案 > 试图制作一个脚本来将两个表添加在一起

问题描述

我正在尝试将两个表的值相加,并将它们放入其中之一。我有表 1 和表 2,我想将它们一起添加到表 1 中。我目前有一个表格,但它不太工作。

var ss = SpreadsheetApp.getActiveSheet();
var num1 = ss.getRange('C53:G72').getValue();
var num2 = ss.getRange('C5:G24').getValue();
ss.getRange('C5:G24').setValue(num1+num2);
ss.getRange('C53:F71').setValue("0");

它只添加单元格 C5 和 C53 的值,然后粘贴到 C5:G24 中,这很奇怪。我是否必须手动添加每个单元格而不是使用 C5:G24 和 C53:G72 对其进行概括?

标签: google-apps-scriptgoogle-sheets

解决方案


是的,您需要手动添加每个单元格中的值

Range.getValue如文档中所述,仅返回所提供范围内的左上角单元格

返回范围内左上角单元格的值。该值可能是数字、布尔值、日期或字符串类型,具体取决于单元格的值。空单元格返回一个空字符串。

Range.setValue应该只影响一个单元格,但文档中没有说明。

您可能感兴趣Range.getValuesRange.setValues因为这些方法允许您一次选择和更新多个单元格值

var ss           = SpreadsheetApp.getActiveSheet();
var rangeA       = ss.getRange( 'C53:G72' );
var rangeB       = ss.getRange( 'C5:G24'  );
var rangeC       = ss.getRange( 'C53:F71' );
var rangeAValues = rangeA.getValues();
var rangeBValues = rangeB.getValues();
var rangeCValues = rangeC.getValues();

for ( var row in rangeAValues ) {
    for ( var col in rangeAValues[ row ] ) {
        rangeAValues[ row ][ col ] = ( +rangeAValues[ row ][ col ] || 0 ) + ( +rangeBValues[ row ][ col ] || 0 ); // Ensure that the result is numeric
    }
}

rangeB.setValues( rangeAValues );

// Assuming that you want to fill C53:F71 with "0"s
for ( var row in rangeCValues ) {
    for ( var col in rangeCValues[ row ] ) {
        rangeCValues[ row ][ col ] = "0";
    }
}

rangeC.setValues( rangeCValues );

请注意,单个setValues比多个更有效setValue https://support.google.com/docs/thread/42793831


推荐阅读