Javascript 如何使用谷歌电子表格从用户那里获取文本?

Javascript 如何使用谷歌电子表格从用户那里获取文本?,javascript,google-apps-script,Javascript,Google Apps Script,我正在尝试为谷歌电子表格创建一个自动邮寄系统。 我想创建一个菜单按钮,用户可以按下,并得到一个大的(段落大小)文本框对话框来写他的消息 我的问题是创建能够传递用户文本输入的正确实例: 我尝试使用Browser.inputBox(“title”),但这只生成一行文本框 我尝试使用SpreadsheetApp.getUi().prompt方法,但这同样只生成一行文本框 关于我应该使用什么类/方法来获取用户的文本消息,有什么想法吗 编辑 这是另一次尝试,这次使用shoeModalDialog()和

我正在尝试为谷歌电子表格创建一个自动邮寄系统。 我想创建一个菜单按钮,用户可以按下,并得到一个大的(段落大小)文本框对话框来写他的消息

我的问题是创建能够传递用户文本输入的正确实例:

  • 我尝试使用
    Browser.inputBox(“title”)
    ,但这只生成一行文本框
  • 我尝试使用
    SpreadsheetApp.getUi().prompt
    方法,但这同样只生成一行文本框
关于我应该使用什么类/方法来获取用户的文本消息,有什么想法吗

编辑 这是另一次尝试,这次使用shoeModalDialog()和html代码。 我认为这很接近,但还不起作用。想法

函数showDialog(){
var html=HtmlService.createHtmlOutputFromFile('testHTML')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(600)
.设置高度(400);
SpreadsheetApp.getUi()//或DocumentApp或FormApp。
.showmodaldiallog(html,“对话框标题”);
}
函数jsGetText(文本){
//对字符串对象执行一些操作
}

函数mySuccessFunction(文本框){
jsGetText(textBox.value)
}


showDialog功能看起来不错。不要将所有代码放入
onClick()
属性中。从表单标记中删除
method=“post”
。在这种情况下,您不希望发送POST请求。使用
Logger.log()
语句和
console.log()
语句,不断检查执行日志中的服务器错误

代码.gs testHTML.html

函数fncGetUserTxt(){
var objUsrInput=document.getElementById('idInputForm');
/*for(OBJUSR输入中的var键){
console.log('key:'+key);
log('value:'+objUsrInput[key]);
};
*/
google.script.run
.withSuccessHandler(mySuccessFunction)
.jsGetText(objUsrInput);
//google.script.host.close()
};
函数mySuccessFunction(文本框){
警报('Success!:'+文本框);
};


如果您想使用HTML为对话框定制内容,可以使用模式和非模式类型来完成,这些类型可以挂起或不挂起服务器端代码。如果这回答了你的问题,请让我知道,我将其作为答案输入。谢谢Sandy Good,我确实尝试过,并且有一个HTML代码,其中包含一个大文本框和一个提交/取消按钮。问题是,当按下Submit键时,我无法返回文本框的值,或者无法使用文本值调用函数。知道怎么做吗?哦,好的。您需要使用注意,作为成功处理程序的函数会自动捕获函数参数部分中的返回值
mySuccessFunction(argReturnGetsCapturedHere)
我尝试了一下,用我写的内容编辑了原始问题。非常感谢您的意见。谢谢
function jsGetText(text) {
  Logger.log('text: ' + text);
  Logger.log('text.length: ' + text.length);

  for (var key in text) {
    Logger.log('key: ' + key);
    Logger.log('value: ' + text[key]);

  };


  var objFieldOne = text['textBox'];
  Logger.log('objFieldOne: ' + objFieldOne);

  //do something with the string object

  return objFieldOne;
};
<script>
function fncGetUserTxt() {

  var objUsrInput = document.getElementById('idInputForm');

  /* for (var key in objUsrInput) {
    console.log('key: ' + key);
    console.log('value: ' + objUsrInput[key]);

  };
  */
  google.script.run
    .withSuccessHandler(mySuccessFunction)
    .jsGetText(objUsrInput); 

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

function mySuccessFunction(textBox) {
  alert('Success! : ' + textBox);
};
</script>


<form id='idInputForm'>
    <textarea name="textBox" id="textBox" cols="60" rows="20" class="html-text-box"></textarea><br>
    <input type="submit" value="send" class="html-text-box" onmouseup='fncGetUserTxt()'>
    <input type="reset" value="cancel" class="html-text-box" onclick="google.script.host.close()">
</form>