Как обновить все столбцы строки одновременно, используя электронную таблицу в Google Apps Script? - PullRequest
0 голосов
/ 04 марта 2020

Я читал некоторые другие подобные вопросы, но я не мог понять, как это сделать с моим кодом.

У меня есть электронная таблица, которая будет заполнена приложением, я использую appendRow для добавления строк, но теперь мне нужно обновить всю строку новым массивом данных, если переменная pid (Códi go) из строки, которую я получаю, существует в электронной таблице, мне нужно обновить ее, а не добавлять новую строку.

My Spreadsheet

    function doGet(request) {


      var sheet = SpreadsheetApp.openById("DOCUMENT_ID");

      var data = sheet.getActiveSheet().getDataRange().getValues();

      var updateIndex;


      try{

        var pid = request.parameter.pid;
        var nome = request.parameter.nome;
        var desc = request.parameter.desc;
        var marca = request.parameter.marca;
        var tipo = request.parameter.tipo;
        var preco = request.parameter.preco;
        var ativado = request.parameter.ativado;

        var rowData = [pid, nome, desc, marca, tipo, preco, ativado];

         // loop through all rows to check the column "pid" has the value of variable "pid"

          for(var i = 1; i < data.length; i++){

            if(data[i][0] == pid){
              updateIndex = i;
            }


          }

      // Update the row here with "rowData"? 
      sheet.



  } catch(e){

    console.log(e);

  }

  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType);



}

Ответы [ 3 ]

1 голос
/ 04 марта 2020
function doGet(request) {
      var sheet=SpreadsheetApp.openById("DOCUMENT_ID");
      var data=sheet.getActiveSheet().getDataRange().getValues();
      var updateIndex;
      try{
        var pid=request.parameter.pid;
        var nome=request.parameter.nome;
        var desc=request.parameter.desc;
        var marca=request.parameter.marca;
        var tipo=request.parameter.tipo;
        var preco=request.parameter.preco;
        var ativado=request.parameter.ativado;
        var rowData=[pid, nome, desc, marca, tipo, preco, ativado];
          for(var i=1; i < data.length; i++){
            if(data[i][0] == pid){
              updateIndex=i;
              break;
            }
          }
         sheet.getRange(updateIndex+1,1,1,rowData.length).setValues([rowData]);
  } catch(e){
    console.log(e);
  }
  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType);
}

Sheet.getRange (начальная строка, начальный столбец, количество строк, количество столбцов)

1 голос
/ 04 марта 2020
  • Когда pid включено в значения столбца "A", вы хотите заменить строку на rowData.
  • Когда pid НЕ включено в значения в столбце «А» вы хотите добавить новую строку с rowData.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Модифицированный скрипт:

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

function doGet(request) {
  var sheet = SpreadsheetApp.openById("DOCUMENT_ID");
  var range = sheet.getActiveSheet().getDataRange();  // Added
  var data = range.getValues();  // Modified
  var updateIndex = 0;  // Modified
  try{
    var pid = request.parameter.pid;
    var nome = request.parameter.nome;
    var desc = request.parameter.desc;
    var marca = request.parameter.marca;
    var tipo = request.parameter.tipo;
    var preco = request.parameter.preco;
    var ativado = request.parameter.ativado;
    var rowData = [pid, nome, desc, marca, tipo, preco, ativado];
    for(var i = 1; i < data.length; i++){
      if(data[i][0] == pid){
        data[i] = rowData;  // Added
        updateIndex = i;
      }
    }
    if (updateIndex != 0) {  // Added
      range.setValues(data);
    } else {
      sheet.appendRow(rowData);
    }
  } catch(e){
    console.log(e);
  }
  // In your script, "result" is not declared. Please be careful this.
  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType);
}

Примечание:

  • В вашем сценарии result не объявлено. Пожалуйста, будьте осторожны с этим.
  • Когда вы изменили скрипт Web Apps, пожалуйста, повторно разверните Web Apps как новую версию. Таким образом, последний скрипт отражается на веб-приложениях. Поэтому, пожалуйста, будьте осторожны.

Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, я прошу прощения.

0 голосов
/ 04 марта 2020

Мое решение:

function doGet(request) {

      // Modified
      var sheet=SpreadsheetApp.openById("DOCUMENT_ID").getActiveSheet();          
      var data=sheet.getDataRange().getValues();
      // 

      var updateIndex;
      try{
        var pid=request.parameter.pid;
        var nome=request.parameter.nome;
        var desc=request.parameter.desc;
        var marca=request.parameter.marca;
        var tipo=request.parameter.tipo;
        var preco=request.parameter.preco;
        var ativado=request.parameter.ativado;
        var rowData=[pid, nome, desc, marca, tipo, preco, ativado];
          for(var i=1; i < data.length; i++){
            if(data[i][0] == pid){
              updateIndex=i;
              break;
            }
          }

         // Modifed
         sheet.getRange(updateIndex + 1, 1, 1, rowData.length).setValues( [rowData] );
         //

  } catch(e){
    console.log(e);
  }
  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...