0

我正在尝试使用这行代码将一系列单元格从一个地方复制到另一个地方:

cell.offset(1, 0, 1, sheet.getLastColumn()).copyTo(cell.offset(nextRow, 0));

要复制的范围始终相同;唯一改变的是nextRow,即要复制到的行。

原始范围包含带有值和公式的单元格。

一切似乎都很好,但是由于未知原因,复制过程的行为异常:

  • 有一次,一切都按预期进行;
  • 另一次,它不复制其中一个单元格;
  • 还有一次,它不复制公式,只复制值;
  • 还有一次,它混合了上面的不一致。

从 UI 复制很好。

我在运行函数时打开了电子表格的事实与它有关吗?

最大的问题:有没有办法确保正确复制范围?

更新:

更多代码以使其更清晰:

var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('SpreadSheetId'));
var sheet = ss.getSheetByName("Matches");
var nextRow = sheet.getLastRow();
var cell = sheet.getRange('a1');
cell.offset(1, 0, 1, sheet.getLastColumn()).copyTo(cell.offset(nextRow, 0));
4

2 回答 2

0

Looks like I've got something acceptable.
The code below didn't throw any error so far, and I'm sticking with it till something better comes up.
Thank you guys, anyway.

var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('SpreadSheetId'));
var sheet = ss.getSheetByName("Matches");
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
var cell = sheet.getRange('a1');
var formulasToCheck = [1,17,18,19,20,21,22,23,24]; //cells 2 to 16 are being set in another place
var formulasOk = true;
var loopCount = 0;
do {
    formulasOk = true;
    cell.offset(1, 0, 1, lastCol).copyTo(cell.offset(lastRow, 0));
    var formulas = cell.offset(lastRow, 0, 1, lastCol).getFormulas()[0];
    loopCount++;
    for (var i = 0; i < formulasToCheck.length; i++) {
        if (formulas[formulasToCheck[i]].slice(0,1) != "=") {
            formulasOk = false;
            break;
        }
    }
} while (!formulasOk && loopCount<5);

Maybe a flush() would suffice. But, this way, I'm very sure the values/formulas are being set properly.

于 2013-01-19T18:56:19.027 回答
-1

我会用一些简单的东西进行测试,例如硬编码你的手机位置。我已经多次使用该功能,并且每次都对我有用。

另外......没有测试它,但这看起来不对:cell.offset(lastRow,0)

于 2013-01-15T07:18:57.403 回答