从电子表格更新数据 - 应用程序脚本



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

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

当我插入一条信息时,我需要知道如何做到这一点(我已经这样做了(,但如果它已经存在,请更新它。这是我创建的示例,以便更好地理解它,在此示例中,我有两张纸,从工作表 1 将数据传递到工作表 2,我正在寻找的是工作表 2 更新所有等于(名称、Num、Proyect(的数据。我希望现在我能更好地理解我在寻找什么。

基本上你要做的是

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

基于此电子表格 代码应如下所示

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

这是我玩过的一个例子:

它会查看从属表以获取任何数据。 当它找到数据时,它会将行、列和值放入一个 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');
} 
}
}

相关内容

最新更新