2

スクリプトからユーザー入力を強制的にフラッシュできるかどうか疑問に思っていました。

コンテキストは次のとおりです。人々がデータを入力することになっているシートと、データが処理されるときにクリックするボタンがあります。

セルをダブルクリックして、書きたいことを書き込んでから、リターンキーを押す前にボタンをクリックしてしまうことがあります。したがって、スクリプトはセルがまだ空であると見なします。

現在入力しているものを強制的にフラッシュするか、セルが現在編集されていることを検出する方法はありますか?

4

6 に答える 6

2

Enterキーを押すか、別のセルを選択するまで、セルは「編集」されません。したがって、別のセルをクリックするように指示するか、ボタンをクリックする前に Enter キーを押すことができます。これが最善の解決策ではないことを理解しています。しかし、ユーザーがセルに何を入力しようとしているのかを検出する方法はありません。

クリックするメニュー オプションにすることもできます。メニュー項目 ( addMenuを参照) をクリックすると、テキストがスプレッドシートに書き込まれるため、メニュー機能を使用するときにそれを読むことができます。繰り返しますが、これは最善の解決策ではないかもしれませんが、それでも解決策です。

于 2013-03-11T17:44:32.673 に答える
0

アプリケーションにこのセルを強制的にアクティブ化させると、新しい値をメモリに取得できます。たとえば、次のようになります。

var mycell = sheet.getActiveSelection();  
var cellcol = mycell.getColumn() ;
var cellrow = mycell.getRow();

sheet.setActiveCell(sheet.getDataRange().offset(0, 0,cellcol, cellrow)); 
于 2016-05-17T12:48:46.637 に答える
0

これが尋ねられてから6年後ですが、ありがたいことに、私は同じ問題を抱えていて、みんなの選択肢を試しました。コメントのように、機能する場合と機能しない場合があります。

したがって、if else ステートメントを作成して、すべてのエントリが空白ではないことを確認してから、コードを実行しました。

function move() {

  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PROCESS');
  var source_range = source.getRange(3, 15, 1, 6).getValues();

  var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SUBMISSIONS');
  var target_range = target.getRange(target.getLastRow() + 1, 2, 1, 6);

  var check = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
  var check_order = check.getRange(7, 15, 1, 1);
  var check_firstname = check.getRange(9, 15, 1, 1);
  var check_lastname = check.getRange(11, 15, 1, 1);
  var check_email = check.getRange(13, 15, 1, 1);

   if (check_order.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else if ( check_firstname.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else if ( check_lastname.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else if ( check_email.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else {

    target_range.setValues(source_range);

    var datecell = target_range.offset(0, -1, 1, 1);

    datecell.setValue(new Date()).setNumberFormat('YY-MM-DD HH:mm:ss');

    var clearsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
    clearsheet.getRange("J3:K4").clearContent();
    clearsheet.getRange("B8:B25").clearContent();
    clearsheet.getRange("H8:H9").clearContent();
    clearsheet.getRange("H11").clearContent();
    clearsheet.getRange("O7:P16").clearContent();
  }
}

完璧に動作します。.msgBoxさらに良いことに、エラーを参照するように をカスタマイズすることもできます。

于 2019-03-22T15:20:05.793 に答える