尝试使用 .isBlank() 检查多个单元格

Trying to check multiple cells with .isBlank()

我目前正在开发一个 Google Apps 脚本,它将在一天结束时基本上重置我的电子表格。

if(ss.getRange('D2').isBlank()){ 
    ss.getRange('C2').moveTo(ss.getRange('D2')); 
  }
  if(ss.getRange('D3').isBlank()){
    ss.getRange('C3').moveTo(ss.getRange('D3'));
  }
  if(ss.getRange('D4').isBlank()){
    ss.getRange('C4').moveTo(ss.getRange('D4'));
  }
  if(ss.getRange('D5').isBlank()){
    ss.getRange('C5').moveTo(ss.getRange('D5'));
  }

这就是我目前正在使用的,但您可能很快就会看出这会变得很乱。有更好的方法吗?

使用数组而不是单个值更有效。这样你只需要获取和设置一次数据。

在以下脚本中调整 sheet 名称和所需范围。范围 C2:D10 假定列 D 是 if 语句的一部分,并且 C 是您想要在 D 为空时获取值的列。

function myFunction() {

  const sheetName = 'Sheet1'; // define the name of the sheet
  const range = 'C2:D10'; // define the range

  const sss = SpreadsheetApp.getActive();
  const ss = sss.getSheetByName(sheetName);
  const data = ss.getRange(range).getValues();
  
  data.forEach((r,i)=>{
    data[i][1] = r[1] ==''? r[0] : r[1];
  })

  ss.getRange(range).setValues(data);

}

尝试使用 forEach

function lfunko() {
  const ss = SpreadsheetApp.getActive();
  ['D2', 'D3', 'D4', 'D5'].forEach(r => {
    let rg = ss.getRange(r);
    if (rg.isBlank()) {
      ss.getRange(r).offset(0, -1).moveTo(rg)
    }
  });
}

虽然确实有更有效的方法可以做到这一点。我觉得 ui 得到了改进,因为你所要做的就是在数组上添加几个范围,它们不需要是连续的。当然,如果不同的范围和不同的方法那么你将不得不修改脚本。