将数据从 sheet 复制到另一个有条件的

Copying data from a sheet to another with conditions

我一直在尝试将一些数据从 sheet 复制到另一个,但 运行 遇到了一些麻烦。

我必须复制数据并停止复制,直到脚本找到空的 space,我必须将此数据粘贴到另一个 sheet 那里有空白 space(可用 space).

这是我目前的代码:

function copyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("sheet1");
  var pasteSheet = ss.getSheetByName("sheet2");
  var source = copySheet.getRange(11,1,1,10);
  var destination = pasteSheet.getRange(1,1,1,10);

  for (i = 1; i < 20; i++) {

    if (destination.isBlank() == true) {
      destination = pasteSheet.getRange(i, 1, 1, 10);
      source = copySheet.getRange(i + 10, 1, 1, 10);
      source.copyTo(destination);
    } else {
      destination = pasteSheet.getRange(i, 1, 1, 10);
    }
  }
}

它识别出目的地是空的space,虽然它并没有真正粘贴它。 for (i = 1; i <20; i++) 用于测试目的。

如果您的数据在第一行和最后 non-empty 行之间没有任何空白行,那么您可以使用:

示例数据:

工作表 1

sheet2

脚本:

function copyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("sheet1");
  var pasteSheet = ss.getSheetByName("sheet2");
  // get last rows of each sheet
  var sLastRow = copySheet.getLastRow();
  var dLastRow = pasteSheet.getLastRow();

  // get data from sheet1 from row 11 to last row
  var source = copySheet.getRange(11,1,sLastRow - 10,10).getValues();  
  // paste data to sheet2's last row
  pasteSheet.getRange(dLastRow + 1,1,source.length,source[0].length).setValues(source);
}

输出:

选择:

如果您的 sheet1 之间有空行,您可以 filter sheet1 中的值。

示例数据:

工作表 1 中的第 13 行空白

function copyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("sheet1");
  var pasteSheet = ss.getSheetByName("sheet2");
  // get last rows of each sheet
  var sLastRow = copySheet.getLastRow();
  var dLastRow = pasteSheet.getLastRow();

  // get data from sheet1 from row 11 to last row
  // exclude rows with blank values in all columns
  var source = copySheet.getRange(11,1,sLastRow - 10,10).getValues()
                        .filter(row => row.filter(col => !col).length < row.length);    
  // paste data to sheet2's first blank row
  pasteSheet.getRange(dLastRow + 1,1,source.length,source[0].length).setValues(source);
}

输出: