0

ばかげた質問を事前にお詫び申し上げます... 私は JS と Google ドキュメントでのスクリプト作成がまったく初めてです。

行の最初の列に「受信済み」または「キャンセル済み」という単語があるGoogleスプレッドシートのすべての行を削除するコードを少し書き込もうとしています。

これが私の現在のコードです:

function DeleteClosedRows() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var end = SpreadsheetApp.getActiveSheet().getLastRow();
    for( var i = 3; i < end + 1; ++i ) {
        var value =  ss.getActiveRange().getCell(i, 1).getValue();
        if (value === "Received" && value === "Canceled") {
            sheet.deleteRows(i); 
        };
    };  
};

これを実行しようとすると、「セル参照が範囲外です」というエラーが表示されます

Execution Transcript を見ると、最後に実行されたアクションは次のとおりです: Range.getCell([3, 1])

.. 私のコードには 100 の間違いがあると確信していますが、今のところ、その部分を通過するのを妨げている最初の問題を理解したいと思います。

ご協力いただきありがとうございます!

4

1 に答える 1

1

コードが失敗する理由は.getActiveRange()、ユーザーが現在選択しているセルの範囲を返すためです。これはあなたが望むものではありません。代わりに、1 つのセルで構成されるシートから範囲を取得する必要があります。このようなもの:

var value =  ss.getRange(i, 1).getValue();

.getRange2 つの引数を指定すると、期待どおりに機能します.getCell

注:を呼び出すと.getRange、セルの範囲全体を取得できます (スプレッドシートで複数のセルを選択できるように)。その後、 を呼び出すと、その範囲の最初のセル.getValueの値を取得します。

パフォーマンスに関する注意:を呼び出すと、セル範囲全体の値を一度に取得できます.getValues。これは、一度にすべての値を含む 2D 配列を返します。これは、一度に 1 つのセルの値を取得するよりもはるかに高速です。

この点を説明するいくつかのリンクされた回答:リンク 1 リンク 2

于 2013-02-25T21:30:25.220 に答える