javascript - 验证 HTML 服务中的电子表格

标签 javascript google-apps-script google-sheets

我有一个使用 Google 表格中的 HTML 服务创建的 html 表单。该表单包含三个字段。我想检查他们在其中一个字段中输入的数据是否包含在sheet2的一列中。如果不是,我只想显示一个警告框,提示“输入无效”。最好的方法是什么?这是我的提交表格。将值与“test”进行比较的代码行是我想要检查电子表格中的值的位置。

function formSubmit() {

  if (document.getElementById("sku").value === "test") {

    alert(document.getElementById("sku").value);
  } else {
    google.script.run.appendRowstoSheet(document.forms[0]);
    document.getElementById("sku").value = ' ';
    document.getElementById("sku").focus();
  }
}

gs 代码:

//insertValuestoSheet
function appendRowstoSheet(form){
  var sku = form.sku,
  loc_array = [{}];
  location = form.location,
  reference = form.reference

  loc_array = location.split("-");
  sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //validateMySheet();

  //don't insert blank sku's
  //Also want to have it so it doesn't insert values where if the sku
  //doesn't match a sku in sheet2, column A. Alert the user if this condition

  if (sku != " ") {
    sheet.appendRow(["'"+reference," "," "," ","'"+sku, "1", " ", " ", " ", "'"+loc_array[0],"'"+loc_array[1],"'" + loc_array[2],"'"+loc_array[3]]);
  }
}

我使用更好的函数名称修改了代码并添加了该函数。当前在appendRowstoSheet中,它插入到电子表格中。如果不满足我的条件,如何在此处返回失败。我的理解正确吗?

最佳答案

您需要返回一些东西:

if (sku != " ") {
  sheet.appendRow(["'"+reference," "," "," ","'"+sku, "1", " ", " ", " ", "'"+loc_array[0],"'"+loc_array[1],"'" + loc_array[2],"'"+loc_array[3]]);
  return true;
} else {
  return false;
};

请注意 return true;return false; 的使用。 truefalse 将返回到您的 HTML 代码并传递到成功处理程序。

您需要运行 withSuccessHandler() 并在该单独的“success”函数中进行最终处理。首先从电子表格中获取数据。然后,如果成功,将运行一个不同的函数来比较这些值。

<script>

function onSuccess(argReturnValue) {
  Console.log('argReturnValue: ' + argReturnValue);

  if (argReturnValue === true) {
    //Code here
  } else {


  };



  //Note that the argument: argValuesFromSpreadsheet is the return value from
  //the gs script function, "getValuesFromForm"

  var valueFromForm = document.getElementById("sku").value;

  //You'll need to modify this line to get a specific value
  var valueFromSpreadsheet = argValuesFromSpreadsheet[0];

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

  if (valueFromForm === valueFromSpreadsheet) {

    alert('alert text here: ' + document.getElementById("sku").value);

  } else {

    document.getElementById("sku").value = ' ';
    document.getElementById("sku").focus();
  }
}

function formSubmit() {

  google.script.run
    .withSuccessHandler(onSuccess)
    .getValuesFromForm(document.forms[0]);
};

</script>

注意:您需要对代码进行一些修改,具体取决于数据类型以及从电子表格返回的数据的格式:

var valueFromSpreadsheet = argValuesFromSpreadsheet[0];

该行需要修改。

关于javascript - 验证 HTML 服务中的电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564126/

相关文章:

debugging - 执行未记录在 Apps 脚本仪表板中的 Stackdriver 日志中

excel - 基于 excel/google 表中的列和行的平均值

javascript - 在另一个下拉列表中选择相同选项时删除选项的 Angular.js 下拉列表

javascript - express : Call to next in error handler

javascript - 部署时出现错误 firebase 函数 [Promises 必须得到适当处理]

javascript - 如何使用正则表达式从 href 属性获取链接

javascript - 如何将附件保存到 Google 云端硬盘根目录以外的文件夹?

google-sheets - GoogleFinance 在获取股票报价时经常返回 #N/A 和内部错误消息

javascript - HtmlService : google. script.run 无法识别 gs 函数

javascript - 替换视频的音轨