简体   繁体   English

如何使用 Google Apps Script 上的电子表格一次更新一行的所有列?

[英]How to update all columns of a row at once using spreadsheet on Google Apps Script?

I read some other similar questions but I couldn't understand it how to do it on my code.我阅读了其他一些类似的问题,但我不明白如何在我的代码上做到这一点。

I have a spreadsheet that will be filled with an app, I am using appendRow to add rows but now I need to update the entire row with new array of data, if the variable pid(Código) from the row I am receiving exists on the spreadsheet, I need to update it, not add a new row.我有一个将填充应用程序的电子表格,我正在使用 appendRow 添加行,但现在我需要用新的数据数组更新整行,如果我收到的行中的变量 pid(Código) 存在于电子表格,我需要更新它,而不是添加新行。

我的电子表格

    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);



}
  • When pid is included in the values of the column "A", you want to replace the row with rowData .pid包含在“A”列的值中时,您希望用rowData替换该行。
  • When pid is NOT included in the values of the column "A", you want to append new row with rowData .pid未包含在“A”列的值中时,您希望使用rowData附加新行。

If my understanding is correct, how about this answer?如果我的理解是正确的,这个答案怎么样? Please think of this as just one of several possible answers.请将此视为几种可能的答案之一。

Modified script:修改后的脚本:

When your script is modified, it becomes as follows.当你的脚本被修改时,它变成如下。

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);
}

Note:笔记:

  • In your script, result is not declared.在您的脚本中,未声明result Please be careful this.请注意这一点。
  • When you modified the script of Web Apps, please redeploy the Web Apps as new version.当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。 By this, the latest script is reflected to Web Apps.这样,最新的脚本就会反映到 Web Apps 中。 So please be careful this.所以请注意这一点。

If I misunderstood your question and this was not the direction you want, I apologize.如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

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(start row,start col,number of rows,number of columns) Sheet.getRange(起始行,起始列,行数,列数)

My solution:我的解决方案:

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Google Apps脚本划掉电子表格的一行(不要删除它!)? - How to cross out a row of a spreadsheet (not to remove it !) using google apps script? 如何使用谷歌应用脚本将一行从一个谷歌电子表格复制到另一个谷歌电子表格? - How to copy a row from one google spreadsheet to another google spreadsheet using google apps script? Google Apps Script - 使用侧边栏表单向电子表格追加一行 - Google Apps Script - Using Sidebar form to append a row to spreadsheet 如何使用Google Apps脚本自动下载Google电子表格数据 - how to automatically download Google spreadsheet data using Google Apps script Google Spreadsheet:如何使用Google Apps脚本命名范围 - Google Spreadsheet: How to name a range using Google Apps Script 如何使用Google脚本在Google电子表格中除特定列以外的所有工作表大写? - How to capitalize all sheet except specific columns on Google spreadsheet using Google Script? 如何使用Google Apps脚本将特定的行从3个Google电子表格复制到另一个电子表格 - How to copy specific rows from 3 google spreadsheet to another spreadsheet using google apps script 使用 Google Apps 脚本使用 Gdoc 模板将电子表格行数据保存到 PDF - Save spreadsheet row data to PDF using Gdoc template using Google Apps Script 使用 Google Apps 脚本和 JavaScript 根据电子表格中的多列获取唯一值 - Get Unique Value Based on Multiple Columns from Spreadsheet using Google Apps Script and JavaScript Google Apps脚本从电子表格的2列中串联2个值-在列表框中显示 - Google Apps Script Concatenate 2 values from 2 columns in Spreadsheet - display in listbox
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM