добавление строки с функцией смещения для заполнения данных для исправления ячейки

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-sheets

Вопрос:

Я пытаюсь заполнить и получить данные в / из Google Sheets из / в веб-приложение Google. Пока что он делает то, что намеревался. Но проблема в том, что я не хочу получать данные в последнюю строку; вместо этого я хочу поместить данные в выбранную строку и столбец.

вот этот код

Code.gs

 function doGet(e){

 Logger.log(e.parameter);
 return HtmlService.createTemplateFromFile("form").evaluate();


}

function formSbmt(formInfo){
 var url = "https://docs.google.com/spreadsheets/d/1c4K-kkzxJPDiCYS4xcD2X7rKR8c_9pYqp9N4vtEEybE/edit#gid=0";
 var ss = SpreadsheetApp.openByUrl(url);
 var ws = ss.getSheetByName("Sheet1");

 ws.appendRow([null,null,formInfo.orderDate,null,null,formInfo.orderNo,formInfo.orderSrc]);

}

function include(filename){
 return HtmlService.createHtmlOutputFromFile(filename).getContent();


}
 

HTML

   <head>
    <base target="_top">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link href="https://fonts.googleapis.com/icon?family=Material Icons" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
    <?!= include("page-css"); ?>
  </head>
  <body>
    <h2 class="center">Order Form</h2>
    <div class="fr">
    <label for="odate">Order Date</label>
    <input type="date"id="odate"></input>
    </div>
    <div class="fr">
      <label for="onum">Website Order</label>
      <input type="number"id="onum"></input>
    </div>
    <div class="fr">
      <label for="wsrc">Source</label>
      <select id="wsrc">
        <option>NAJ</option>
        <option>JAJ</option>
        <option>FJ</option>
      </select>
    </div>
    <div class="fr">
    <button id="btn">Submit</button>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <?!= include("page-js"); ?>
  </body>
 

я разделил Javascript, создав функцию включения

Скрипт-js

 <script>

      document.getElementById("btn").addEventListener("click",sclicked);

      function sclicked(){
        var formInfo = {};

         formInfo.orderDate = document.getElementById("odate").value;
         formInfo.orderNo = document.getElementById("onum").value;
         formInfo.orderSrc = document.getElementById("wsrc").value;


         google.script.run.formSbmt(formInfo);
         document.getElementById("odate").value = "";
         document.getElementById("onum").value = "";
         document.getElementById("wsrc").value = "";


      }
      
      
    </script>
 

дело в том, что он заполняет данные в последней доступной строке. но у меня уже есть некоторые данные, а также в столбце 0 1 и так далее

Я хотел поместить данные в строку 552 и столбцы 2, 5 и 6 и так далее, за некоторыми исключениями столбцов.

PS: У меня есть столбцы режима на листе, которые мне нужно заполнить в той же форме, просто хотел поэкспериментировать с несколькими столбцами, прежде чем перейти на полный лист.

Вот мой лист Google
Это мое веб-приложение

Лист

Комментарии:

1. Когда вы говорите I want to put data to the selected row and column , вы имеете в виду поместить данные в любую строку, выбранную в данный момент на вашем листе? Например, если D3 выбрано значение, данные будут записываться в C3 , F3 и G3 ? Кроме того, привязан ли скрипт к электронной таблице?

2. Нет, я хочу идти последовательно, но начинаю после определенной строки для 1-й данные, тогда они будут идти последовательно,

3. Что это значит? Вы хотите записать в первую строку пустые ячейки C, F, G?

4. Нет. я хочу начать его со строки 523 с C F G пустым для каждой новой записи

5. Мне неясно, чего вы хотите достичь. Пожалуйста, рассмотрите возможность расширения вашего описания.

Ответ №1:

Объяснение:

Получите последнюю строку с содержимым в соответствии со столбцом C и начните вставку из столбца C.

  • Этот подход предполагает, что столбец C не имеет пустых ячеек между ними, а значения начинаются с ячейки C1.

Решение:

Изменить:

  ws.appendRow([null,null,formInfo.orderDate,null,null,formInfo.orderNo,formInfo.orderSrc]);
 

Для:

  var cLength = ws.getRange("C1:C").getValues().filter(String).length;
 var data = [formInfo.orderDate,null,null,formInfo.orderNo,formInfo.orderSrc];
 ws.getRange(cLength 1,3,1,data.length).setValues(data);
 

Комментарии:

1. я вставил ваш код, и он ничего не вернул

2. @AliAhmed Я повторю то, что уже есть в моем ответе, но просто чтобы подчеркнуть это. 1) У вас есть пустые ячейки в столбце C? 2) Значения начинаются со строки 1 в столбце C или с другой строки? В качестве альтернативы, предоставьте копию своего листа (удалите конфиденциальную информацию), чтобы я мог видеть ваш лист. Как вы можете понять, действительно сложно дать ответ, если вы не видите лист.

3. Я обновляю ссылку на свой лист. я действительно ценю вашу помощь.

4. @AliAhmed в редакторе сценариев код не связан с вашим вопросом. Можете ли вы обновить код?

5. обновлен код. извините, я новичок во всем этом.