как получить значение путем ввода в одно текстовое поле из другого столбца той же строки - PullRequest
0 голосов
/ 02 августа 2020

у меня есть файл html с двумя текстовыми полями 1. порядок 1. количество я хочу, чтобы при вводе числа в текстовое поле заказов я получал значение из другого столбца в моем листе Google в той же строке которые соответствуют этому порядку

это мой код Code.gs, он не работает

    function doGet(e) {
  
 return HtmlService.createHtmlOutputFromFile('page');
}




function getCost(oneCode){
  
  var url = "https://docs.google.com/spreadsheets/d/1333t7lvECnmOcCnTE6gnn_RN1wrPckWpIETiPUjkUnU/edit#gid=0";
  var ss = SpreadsheetApp.openUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(1,1,ws.getLastRow(),2).getValues();
  
  var ordersList = data.map(function(r){ return r[0]; });
  var amountList = data.map(function(r){ return r[1]; });
  
  
  var position = ordersLis.indexOf(oneCode);
  if(position > -1){
    return amountList[position];
 
  } else {
    return "not found";
    
  }
  
}  

============= =========== это html код

    <!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <script>
  document.getElementById("one").addEventlistener("input",doThis);
  
  function doThis(){
  
  var oneCode = document.getElementById("one").value;
  
  
  
  google.script.run.withSuccessHandler(updateAmount).getCost(oneCode);
  
  }
  
  function updateAmount(cost){
  
  document.getElementById("two").value = cost;
  
  }
  
  </script>
  <body>
  <div>
    <input id="one" type="text">
    <label for="one">orders</label>
    </div>
    <div>
    <input disabled id="two" type="text">
    <label for="two">amount</label>
    </div>
    
    
  </body>
</html>

это 2 столбца, я хочу найти совпадение слева направо

1 Ответ

2 голосов
/ 02 августа 2020

Я хотел бы предложить следующую модификацию.

Пункты модификации:

  • На стороне HTML & Javascript,

    • addEventlistener равно addEventListener.

    • При использовании вашего сценария измените document.getElementById("one").addEventListener("input",doThis); на следующее. Поскольку, когда document.addEventListener("DOMContentLoaded", function) не используется, ошибка возникает в addEventListener.

        document.addEventListener("DOMContentLoaded", function(){
          document.getElementById("one").addEventListener("input",doThis);
        });
      
    • Когда input используется в качестве типа события, когда введенный текст - 130, 1, 13 и 130 отправляются. При этом google.script.run.withSuccessHandler(updateAmount).getCost(oneCode) запускается 3 раза. Поэтому я думаю, что change может быть подходящим для этой ситуации.

  • На стороне скрипта Google Apps,

    • на var ss = SpreadsheetApp.openUrl(url);, openUrl равно openByUrl.
    • Я думаю, что в вашем скрипте var position = ordersLis.indexOf(oneCode); равно var position = ordersList.indexOf(oneCode);.
    • В вашем скрипте oneCode из getCost(oneCode) - это строковый тип.

Когда указанные выше пункты отражаются в вашем скрипте, он становится следующим:

Измененный скрипт:

HTML & Javascript side:

<!DOCTYPE html>
<html>

<head>
  <base target="_top">
</head>
<script>
  document.addEventListener("DOMContentLoaded", function() {
    document.getElementById("one").addEventListener("change", doThis);
  });

  function doThis() {
    var oneCode = document.getElementById("one").value;
    google.script.run.withSuccessHandler(updateAmount).getCost(oneCode);
  }

  function updateAmount(cost) {
    document.getElementById("two").value = cost;
  }
</script>

<body>
  <div>
    <input id="one" type="text">
    <label for="one">orders</label>
  </div>
  <div>
    <input disabled id="two" type="text">
    <label for="two">amount</label>
  </div>
</body>

</html>
  • Когда <script>###</script> находится внизу HTML, я думаю, что document.addEventListener("DOMContentLoaded", function() {}) не требуется.

Google Apps Сторона скрипта:

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('page');
}

function getCost(oneCode){
  var url = "https://docs.google.com/spreadsheets/d/1333t7lvECnmOcCnTE6gnn_RN1wrPckWpIETiPUjkUnU/edit#gid=0";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(1,1,ws.getLastRow(),2).getValues();
  var ordersList = data.map(function(r){ return r[0].toString(); });
  var amountList = data.map(function(r){ return r[1].toString(); });
  var position = ordersList.indexOf(oneCode);
  if(position > -1){
    return amountList[position];
  }
  return "not found";
}

Использование:

  • Судя по вашему скрипту, вы используете веб-приложения. При использовании этого сценария скопируйте и вставьте приведенные выше сценарии в редактор сценариев и повторно разверните веб-приложения как новую версию. Таким образом, последний сценарий отражается в веб-приложениях. Будьте осторожны.
  • При открытии веб-приложений введите значение в поле ввода и нажмите sh клавишу ввода или снимите фокус с поля ввода. При этом выполняется addEventListener("change", doThis) и выполняется doThis.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...