通过Google电子表格中的Google脚本复制值

时间:2017-12-10 11:55:22

标签: google-apps-script google-sheets

我希望每5分钟将信息从源表复制到目标表,如本例所示

https://productforums.google.com/forum/#!topic/docs/s0cFHaIvWV0;context-place=forum/docs

如果复制普通值,它工作正常。问题是,如果源表中的信息是公式,它将复制公式而不是单元格中的值。

我应该如何修改我的脚本?

function createTimeDrivenTrigger() {
ScriptApp.newTrigger('myFunction')
    .timeBased()
    .everyMinutes(5)
    .create()
}

function myFunction() {
var ss = SpreadsheetApp.getActive(),
    sheet2 = ss.getSheetByName("Sheet 2"), //target sheet
    sheet1 = ss.getSheetByName("Sheet 1"), //source sheet
    startRow = PropertiesService.getScriptProperties()
        .getProperty('start') || 1;
try {
    sheet1.getRange(startRow, 1, 4, sheet1.getLastColumn())
        .copyTo(sheet2.getRange(sheet2.getLastRow() + 1 || 1, 1));
    PropertiesService.getScriptProperties()
        .setProperty('start', parseInt(startRow) + 4);
} catch (e) {
    PropertiesService.getScriptProperties()
        .deleteProperty('start');
    ScriptApp.getProjectTriggers().forEach(function (t) {
    ScriptApp.deleteTrigger(t);
    });
}
}

1 个答案:

答案 0 :(得分:0)

在要复制的范围内使用.getValues()

文档here

<强> 修改

以下是如何使用getRange()函数的示例。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange("B2:D4");

在您的示例中,您有sheet1 = ss.getSheetByName("Sheet 1")作为您希望数据来源的来源。

因此,如果您希望从Sheet 1获取特定范围的值,则可以在getRange()变量上使用sheet1方法。

E.g。您想要获取单元格A1,B1,C1和D1中的值范围,您可以将getRange()方法添加到sheet1,如下所示:

sheet1.getValues("A1:D1")

我希望这能清楚地解释清楚。