监视电子表格单元格以进行更改,提示响应用户并将用户输入放入不同的工作表但相同的单元格地址

时间:2015-03-04 11:48:42

标签: google-apps-script dialog google-sheets

我有一张Google表单,其中包含一个下拉列表,其中包含两个值“A”和“B”,其中“A”可用,“B”已预订。我想创建一种情况,当用户将单元格从“A”更改为“B”时,会弹出一个输入框,要求用户输入其名称,然后单击“确定”并将名称存储在同一单元格中在另一张纸上的位置。

编辑过的代码,这个可行。我学会了'Stacks'Thanks。使用'B5'测试两张纸之间的数据传输。如何使表单监听所有单元格并获取用户选择的单元格范围。

var globalVariableForDropDown = "";

function onEdit(e) {
//Logger.log('e.value: ' + e.value);

var cellEdited = e.range.getA1Notation();

Logger.log('cellEdited: ' + cellEdited);

if (cellEdited === "B5") {
//Run a input box
globalVariableForDropDown = e.value;
var theUserInput = Browser.inputBox('Enter name please');
};

//Place user input in corresponding cell on iNames sheet

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('iNames');    
var range = sheet.getRange('B5');
    range.setValue(theUserInput);

};

1 个答案:

答案 0 :(得分:1)

要监控单元格并使用输入框,代码将如下所示:

gs代码 - 监视器编辑

var globalVariableForDropDown = "";

function onEdit(e) {
  //Logger.log('e.value: ' + e.value);

  var cellEdited = e.range.getA1Notation();
  Logger.log('cellEdited: ' + cellEdited);

  if (cellEdited === "B3") {
    //Run a input box
    globalVariableForDropDown = e.value;
    var theUserInput = Browser.inputBox('Enter the Info');
    //Run a function to process the input
    gsFunctionToRun(theUserInput);
  };
}

对于对话框,代码看起来像这样:

gs代码 - 监视器编辑

var globalVariableForDropDown = "";

function onEdit(e) {
  Logger.log('e.value: ' + e.value);

  var cellEdited = e.range.getA1Notation();
  Logger.log('cellEdited: ' + cellEdited);

  if (cellEdited === "B3") {
    //Run a dialog box
    globalVariableForDropDown = e.value;
    displayUserDialog();
  };
}

您需要根据需要修改该代码。更改" B3"的单元格符号到你要监控的单元格。

gs代码 - 显示用户对话框

function displayUserDialog() {

  //Logger.log('displayUserDialog ran: ');

  var html = HtmlService.createTemplateFromFile('DialogBox')
    .evaluate()
    .setWidth(650)
    .setHeight(450)
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);

  SpreadsheetApp.getUi()
    .showModalDialog(html, 'My Dialog Name');
};

DialogBox.html - 对话框的HTML文件

<div>

  <input id="idNameInput" type="text" value="Enter Something">

  <input type='button' value="Update Spreadsheet" onclick='fncCallServerToDoSomething()'>
</div>

<script>

  function fncCallServerToDoSomething() {
    console.log('fncCallServerToDoSomething ran!');

    var aReturnedValue = document.getElementById("idNameInput").value;

    console.log("value of input field: " + aReturnedValue);

    google.script.run
      .withFailureHandler(onFailure)
      .gsFunctionToRun(aReturnedValue);

    //google.script.host.close();
  };

  function onFailure(error) {
    console.log(error.message);
  };
</script>

gs代码写入数据

function gsFunctionToRun(argValueRetrieved) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var theSheetToWriteValueTo = ss.getSheetByName('Your Sheet Name to Write to');
  var cellToWriteTo = theSheetToWriteValueTo.getRange(globalVariableForDropDown);
  cellToWriteTo.setValue(argValueRetrieved);
}

添加要写入的工作表名称。

相关问题