我正在将多个电子表格的数据传输到一个电子表格,我要做的是将某些列的最后数据传输到主电子表格,并将它们插入到某些列的最后可用行中,现在,我插入所有数据,但我想知道如何检查主电子表格,以便如果这些数据已经存在,则不会删除它们而是更新它们。我拥有的脚本如下...
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)的数据。我希望现在我能更好地了解我要寻找的东西。
答案 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)
基本上你要做的是
基于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);
}