更新电子表格中的数据-Apps脚本

时间:2018-09-04 14:29:44

标签: javascript google-apps-script google-sheets

我正在将多个电子表格的数据传输到一个电子表格,我要做的是将某些列的最后数据传输到主电子表格,并将它们插入到某些列的最后可用行中,现在,我插入所有数据,但我想知道如何检查主电子表格,以便如果这些数据已经存在,则不会删除它们而是更新它们。我拥有的脚本如下...

  function  Gas10(){  
  var ss1 = SpreadsheetApp.openById("ID"); 
  var ssh1 = ss1.getSheetByName("Sheet 1");


var lastRow1 = ssh1.getLastRow();
var gtRange1 = ssh1.getRange("C"+(lastRow1)+":K"+(lastRow1)).getValues();
var gtRange2= ssh1.getRange("A" + (lastRow1)).getValue();

var ss2 = SpreadsheetApp.getActiveSpreadsheet();

var ssh2 = ss.getSheetByName("Sheet 2");
var lastRow2 = ssh2.getLastRow() + 1;
var setRange1 = ssh2.getRange(lastRow2, 4, gtRange1.length, gtRange1[0].length).setValues(gtRange1);
var setRange2 = ssh2.getRange(lastRow2, 3).setValue(gtRange2);            
}  

当我插入一条信息(我已经这样做)时,我需要知道该怎么做,但是如果它已经存在,请对其进行更新。 This是我创建的示例,因此可以更好地理解它,在此示例中,我有两张纸,从第一张纸到第一张纸,我将数据传递到第二张纸,而我正在寻找的是第二张纸将全部更新等于(名称,数字,Proyect)的数据。我希望现在我能更好地了解我要寻找的东西。

2 个答案:

答案 0 :(得分:2)

以下是我玩过的一个示例:

它将查看从表中是否有任何数据。当找到数据时,它将行和列以及值放入obj,然后将其添加到数组中。完成后,它会调用updMaster,后者会在这些相同的单元格中查找数据(假设如果这些单元格为空,则这些单元格位于同一位置,那么它将添加数据,并且我还将背景更改为浅蓝色,以向我展示更新它的位置细胞。

如果愿意,可以为不同的表运行getSlaveData()。

function getSlaveData(){
  var ss=SpreadsheetApp.getActive();
  var ssh=ss.getSheetByName('Sheet2');
  var sA=[];
  var srg=ssh.getDataRange();
  var svA=srg.getValues();
  for(var i=0;i<svA.length;i++){
    for(var j=0;j<svA[i].length;j++){
      //if(svA[i][j]){
      if(!ssh.getRange(i+1,j+1).isBlank()){//optional way to look for values
        var sObj={};
        sObj['row']=i + 1;
        sObj['col']=j + 1;
        sObj['value']=svA[i][j];
        sA.push(sObj);
      }
    }
  }
  updMaster(sA);
}

function updMaster(sA){
  var ss=SpreadsheetApp.getActive();
  var msh=ss.getSheetByName('Sheet1');
  for(var i=0;i<sA.length;i++){
    if(msh.getRange(sA[i].row,sA[i].col).isBlank()){
      msh.getRange(sA[i].row,sA[i].col).setValue(sA[i].value);
      msh.getRange(sA[i].row,sA[i].col).setBackground('lightblue');
    } 
  }
}

答案 1 :(得分:1)

基本上你要做的是

  • 获取要添加到目标电子表格的新行
  • 获取目标电子表格的所有必需数据
  • 检查新的Line数据是否与目标数据数组中的数据相同
    • 如果这样,请更改ID值
  • 将更改后的数据粘贴到目标电子表格中

基于this spreadsheet,代码应如下所示

function  Gas10(){  
    var ss1 = SpreadsheetApp.getActiveSpreadsheet();
    var ssh1 = ss1.getSheetByName("Sheet 1");
    var ssh2 = ss1.getSheetByName("Sheet 2");
    var lastRow1 = ssh1.getLastRow();
    var lastCol1 = ssh1.getLastColumn();
    var newLine = ssh1.getRange(lastRow1, 2, 1, lastCol1 - 1 ).getValues();
    var destDatas = ssh2.getDataRange().getValues();
  for (var i = 1; i < destDatas.length; i++)
  {
      if (newLine[0][0] == destDatas[i][0]
       && newLine[0][1] == destDatas[i][1]
        && newLine[0][2] == destDatas[i][2])
      {
       destDatas[i][3] = newLine[0][3];
      }
  }
  // add newLine to destDatas
    destDatas.splice(destDatas.length, 0, newLine[0]);
  var lastColumn = ssh2.getLastColumn();
  var lastRow2 = ssh2.getLastRow() + 1;
  ssh2.getRange(1, 1,  destDatas.length, lastColumn).setValues(destDatas);
  ssh1.deleteRow(lastRow1);
}