0

Google ドキュメントの Excel のようなスプレッドシートがあります。私は Mozilla Firefox と Google Chrome の両方を使用しています。私のほとんどすべての列にはドロップダウンリストの検証があります(ご存知のように、各セルには選択するドロップダウンリストがあります。明確にしたいと思います)。最初にスプレッドシートを作成したときにそれらを配置し、作成した範囲からすべての列を検証しました。私の問題は、新しい行を追加するたびに、その行に検証がなく、すべてなくなっていることです。古い行にはまだ検証があります。

そのため、新しい行を追加するたびに検証を 1 つずつ設定します。これはイライラします。一部の人々も同じ問題を抱えていて、オンラインで尋ねましたが、誰も答えませんでした.

検証のある空の行をコピーして新しい行に貼り付けると、正常に動作します。それで、私が言いたいのは、そのスクリプトを書くのを手伝ってくれませんか? スクリプトを実行するときに 5 行をコピーしたいですか?

スクリプトを勉強しようとしていますが、今のところ何もしていません。おもう

var actSc = SpreadsheetApp.getActiveSpreadsheet();
var range = actSc.getRange("A1:B1");

これは、私が見た例から得たすべてです。私は真剣です。私は何も得ませんでした。これが1つのセルの範囲をコピーする場合、すべての列に対してそれを行う必要があると思います. しかし、どうすればそれらを新しい行に入れることができますか? setRangeのようなものはありますか?私は本当にいくつかの助けを使うことができました。これは私を夢中にさせており、このスクリプトのことは本当に理解できません。

範囲とは、「STATES」のような範囲があり、「NY、LA、CA」などを含むということです。この NY、LA、CA は、その STATES 列のセルのドロップダウン リストを埋めます。この getRange がこの範囲を意味することを願っています。

私の英語でごめんなさい。

4

2 に答える 2

3

私の理解が正しければ、新しい行をシートに追加し、列の既存の検証を維持する関数をスクリプト化する必要があります。これは確かに可能であり、それほど難しくありません。1 つのアプローチは、他のシートで再利用したい場合にシート全体を一度に更新する「検証の更新」機能です。ただし、最初に、基本的な Google Apps スクリプトを実行するために知っておく必要があるオブジェクト クラスの簡単な概要を使用できるように思えます。

  • SpreadsheetApp - このクラスは、スプレッドシート サービスの基盤と考えてください。UI やデータ検証セットの作成など、特定のスプレッドシート自体に関連付けられていないファイル I/O と機能を提供します。これは、個々のスプレッドシート ドキュメントすべてへのインターフェイスです。
  • スプレッドシート- 複数のシートを含むことができるスプレッドシート ドキュメント ファイル。これは、ドライブで新しい Google スプレッドシート ドキュメントを作成するときに作成されるものです。所有権の管理、アクセス許可の設定、メタデータへのアクセスなど、ドキュメント レベルの機能を提供します。Sheet クラスと重複する部分があるため、これはごちゃ混ぜのように思えるかもしれません。
  • シート- 個々のシートは、通常スプレッドシートと考えられるもので、行と列のセットです。各スプレッドシート ドキュメントには、多数の個別のシートを含めることができます。Sheet クラスを使用すると、シートの全体的な外観を変更できます。行をフリーズまたは非表示にしたり、セルの範囲を編集できないように保護したり、行や列を追加/削除したりできます。コンテンツを含む最後の行やシート全体の最大範囲など、シートに関するデータを取得することもできます。
  • 範囲- 別のレベルを下にドロップすると、セルの特定の長方形の領域を表す Range オブジェクトに到達します。これは、1 つのセルのように小さくすることも、シート全体と同じように大きくすることもできます。ただし、Ranges で不連続なセルを表すことはできないようです。Range オブジェクトをコピーしてシートに貼り付けることができるコンテンツとして扱ったため、ここで問題が発生しました。これは理解できます。ただし、Range はそれが表すセル内のデータではありません。それはそれらの細胞への単なるインターフェースです。データ自体にアクセスする場合は、階層の最下位レベルにドロップダウンする必要があります。
  • 値 - シートの実際の内容は、Google Apps Script がサポートする JavaScript のサブセットで操作できる通常の JavaScript 値 (文字列、整数、ブール値など) です。

シート内の値で何かを行うには、最初に Sheet から Range オブジェクトを取得し (これは SpreadsheetApp から取得します)、次に Range から値を取得します。

var values = SpreadsheetApp.getActiveSheet().getRange("A1:B1").getValues(); // returns [[]]

getValues() は多次元配列を返すことに注意してください。シートの値を表すと、次のようになります。

// row 1 [[column A, column B, column C, column D, ...],
// row 2 [column A, column B, column C, column D, ...],
// row 3 [column A, column B, column C, column D, ...],
// row 4 [column A, column B, column C, column D, ...],
// row 5 [column A, column B, column C, column D, ...], ...]

ですのでA1:B1の範囲が1行2列の範囲であれば、A1表記で値を取得するか、範囲の左上の行と列を指定して、取得したい行数と列数を指定することで値を取得できます。取得:

var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A1:B1");
var range = sheet.getRange(1, 1, 1, 2); // row 1, column 1, 1 row, 2 columns
var values = range.getValues(); // returns [[50, 100]]

A1 の値が 50 で、B1 の値が 100 の場合、上記の最後の関数は を返し[[50, 100]]ます。個々のセル値に直接アクセスすることもできます:

var range = sheet.getRange("A1");
var value = range.getValue(); // returns 50
var cell = range.getCell().getValues(); // returns [[50]]

もちろん、範囲の値も設定できます。

var range = sheet.getRange("A1:B2");
range.setValues([[50, 100]]);
range = sheet.getRange(1, 1); // same as sheet.getCell(1, 1)
range.setValue(50); // the value of A1, or row 1 column 1, is now 50

次のステップは、 Data Validationクラスがどのように機能するかを理解することです。Data Validation Builderを使用して Data Validation オブジェクトを作成します。これにより、一連のルールを連結して範囲に適用できます。次に、範囲をそのデータ検証ルール セットに設定します。

var stateList = ["AK", "AL", "AR", ...];
var rules = SpreadsheetApp.newDataValidation() // create a new Data Validation Builder object and use method chaining to add rules to it
        .requireValueInList(stateList, true) // first param is the list of values to require, second is true if you want to display a drop down menu, false otherwise
        .setAllowInvalid(false) // true if other values are allowed, false otherwise
        .setHelpText("Enter a state") // help text when user hovers over the cell
        .build();
range.setDataValidation(rules); // apply the rules to a range

行を挿入すると、ルールが自動的にコピーされます。

var lastRow = sheet.getLastRow(); // get the last row that contains any content
sheet.insertRowAfter(lastRow);

または、ルールをコピーして別の場所で使用します。

var cell = sheet.getRange(1, 1, 1, 1);
var rule = sheet.getDataValidation(); // returns rule
var range = sheet.getRange("A1:B1");
var rules = range.getDataValidations(); // returns [[rules, rules]]
var lastRow = sheet.getLastRow(); // or sheet.getMaxRows()
range.setDataValidations(rules);

したがって、これらの概念を非常に簡単に組み合わせて、行の追加、検証ルール セットの構築、新しいセル範囲への検証の追加に必要な関数を記述することができます。これらのことのほとんどは、私がここで説明するよりも簡潔に行うことができますが、より詳細な説明を探しているようです。お役に立てば幸いです。

于 2015-02-14T04:41:41.703 に答える
0
   var sheetToUpdate = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();  
    sheetToUpdate.insertRowAfter(sheetToUpdate.getLastRow());

   var rangeToUpdate = sheetToUpdate.getRange(sheetToUpdate.getLastRow()+1,1,1,sheetToUpdate.getMaxColumns());
   sheetToUpdate.getRange(sheetToUpdate.getLastRow(),1,1,sheetToUpdate.getMaxColumns()).copyTo(rangeToUpdate, {formatOnly:true});
于 2012-07-20T12:14:31.037 に答える