如何拥有有效的Google表格脚本,该脚本仅在空单元格上运行,而其他单元格保持不变

时间:2019-06-07 16:53:01

标签: google-apps-script google-sheets

我有一个目前可以正常运行的脚本,但不是我想要的。

这会将数据从B列复制到G列,其中包含从openweathermap.org提取信息的公式,并将该公式的值粘贴到H列至L列。我运行此脚本的原因是openweathermap.org的公式会更新。我希望脚本仅在空单元格上运行,而将仅包含H至L列中数据的单元格保留下来。 (因此,它们只粘贴一次值)

我是Google脚本的新手,并且已经在Google上进行了研究,但找不到适合我的脚本的先前结果

我希望代码能够运行,复制和数据,但如果包含数据,则忽略H到L列中的任何单元格

脚本

function moveValuesOnly1() {var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getRange("Sheet1!B:G"); 
source.copyTo(ss.getRange("Sheet1!H:L"),
 {contentsOnly: true});}

我希望代码能够运行,复制和数据,但如果包含数据,则忽略H到L列中的任何单元格

1 个答案:

答案 0 :(得分:0)

这实际上要困难得多,然后我以为会变得如此。

尝试一下:

function moveValuesOnly1() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var srg=sh.getRange(1,2,sh.getLastRow(),6);
  var vA=srg.getValues();
  sh.getRange(getLastRowOfRange("H:M")+1,8,srg.getHeight(),srg.getWidth()).setValues(vA);
}


function getLastRowOfRange(A1Range) {
  var A1Range=A1Range||"H:M";//default for debugging
  var ss=SpreadsheetApp.getSheetByName('Sheet1');
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(A1Range);
  var vA=rg.getValues();
  for(var i=vA.length-1;i>-1;i--) {
    if(vA[i].join("").length==0) {
      vA.splice(i,1);
    }
  }
  Logger.log(vA.length);
  return vA.length;
}