0

次のコード行を使用して、セルの範囲をある場所から別の場所にコピーしようとしています:

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

コピーされる範囲は常に同じです。変更nextRowされているのは、コピー先の行だけです。

元の範囲には、値と数式を含むセルがあります。

すべて問題ないように見えますが、理由は不明ですが、コピー プロシージャが不安定な動作をしています。

  • 一度、すべてが期待どおりに機能します。
  • 別の場合は、セルの 1 つをコピーしません。
  • 別の場合は、数式はコピーせず、値のみをコピーします。
  • 別の機会には、上記の矛盾が混ざり合っています。

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

納得できるものができたようです。
以下のコードは、これまでのところエラーをスローしていません。より良いものが出てくるまで、このコードを使い続けます。
とにかく、みんなありがとう。

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);

たぶん、flush()十分でしょう。しかし、このようにして、値/式が適切に設定されていると確信しています。

于 2013-01-19T18:56:19.027 に答える
-1

たとえば、セルの場所をハードコーディングするなど、簡単なものでテストします。私はこの機能を何度も使用してきましたが、毎回機能します。

また...テストしませんでしたが、これは間違っているようです: cell.offset( lastRow , 0)

于 2013-01-15T07:18:57.403 に答える