Javascript google应用程序脚本-在下一个空行中写入数据

Javascript google应用程序脚本-在下一个空行中写入数据,javascript,java,google-apps-script,google-sheets,Javascript,Java,Google Apps Script,Google Sheets,使用谷歌应用程序脚本,我从其他电子表格收集数据。设置为每天收集数据,并将其写入“数据库”中 到目前为止,我将此作为基本解决方案,但这始终是写入数据并替换现有数据 在我的脚本中,我想要将数据从导入范围电子表格复制到特定列,我想要的是将数据连续复制到下一个空行,但如何在不删除现有复制数据的情况下执行此操作?。请帮忙 var scriptProperties = PropertiesService.getScriptProperties(); var ssid = '1usRuvazJlxAGvF0G

使用谷歌应用程序脚本,我从其他电子表格收集数据。设置为每天收集数据,并将其写入“数据库”中

到目前为止,我将此作为基本解决方案,但这始终是写入数据并替换现有数据

在我的脚本中,我想要将数据从导入范围电子表格复制到特定列,我想要的是将数据连续复制到下一个空行,但如何在不删除现有复制数据的情况下执行此操作?。请帮忙

var scriptProperties = PropertiesService.getScriptProperties();
var ssid = '1usRuvazJlxAGvF0G2-e00MEQ_AjMCOnWopBFX4qfUcc';
var sheetName = 'DATABASE';

function CopyDatabase() {
  var sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetName);
  var startRow = 3;
  var numRows = sheet.getLastRow() - 1;
  var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
  var data = dataRange.getValues();
  var Copy = "Copy";
  var newRow = sheet.getLastRow() + 1;
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    if (row[5] != Copy) {
      var Code = row[0];
      var orderDate = row[1];
      var custName = row[2];

      sheet.getRange(startRow + i, 5).setValue(Code);
      sheet.getRange(startRow + i, 6).setValue(orderDate);
      sheet.getRange(startRow + i, 7).setValue(custName);

    }
  }
}

将数据复制到电子表格中的其他选项卡可能是最简单的。尝试将代码中的
for
循环替换为以下内容:

  const targetSheetName = 'Archive of Daily Data';
  const targetSheet = sheet.getParent().getSheetByName(targetSheetName)
    || sheet.getParent().insertSheet(targetSheetName);
  data
    .filter(row => row[3] === Copy)
    .forEach(row => targetSheet.appendRow([row[0], row[1], row[2]]));

如果我理解正确,您希望将列
A-D
(其中列
D
不是
copy
)中的行复制到列
E-H
,复制到这些目标列的第一个空行

如果是这样,您可以:

  • 通过获取列
    E-H
    via中的第一个空行
  • 使用从源数据中筛选出不包含
    Copy
    的行
  • 用于将筛选的行复制到目标列(从第一个空行开始)
代码段:
我看不出您在哪里指定了第二个电子表格。整个流程都在一个电子表格上,就在工作表的左侧和右侧!我贴了一个答案,解释如何做到这一点。我不确定您是要复制包含
copy
的行,还是要复制不包含它的行。另外,我不确定是否应该复制
D
列。无论如何,我希望总的想法是清楚的。嗨!,根据代码,包含COPY的行仅作为过滤器,以防止数据重复,如果(行[5]!=COPY),则运行脚本。动态数据是A列、B列和C列,我想连续记录的数据库是E列、F列和G列,而不替换以前的数据(追加行)@MetaMan谢谢你…嗨!我已经尝试过这种方法,它是有效的,但我需要的是复制到一个工作表。这段代码给了我不同项目的灵感。谢谢@兰布利希斯。你好你完全理解我需要什么。完美无瑕的我已经尝试过这个方法,它的工作方式我想要的,谢谢老兄!
  const targetSheetName = 'Archive of Daily Data';
  const targetSheet = sheet.getParent().getSheetByName(targetSheetName)
    || sheet.getParent().insertSheet(targetSheetName);
  data
    .filter(row => row[3] === Copy)
    .forEach(row => targetSheet.appendRow([row[0], row[1], row[2]]));
function CopyDatabase() {
  var sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetName);
  var startRow = 3; 
  var numRows = sheet.getLastRow() - startRow + 1; 
  var startCol = 1;
  var numCols = 4;
  var startColTarget = 5;
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols); 
  var data = dataRange.getValues(); 
  var Copy = "Copy"; 
  var firstEmptyRow = sheet.getRange("E3:H3").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() + 1;
  var dataToCopy = data.filter(row => row[3] !== Copy);
  sheet.getRange(firstEmptyRow, startColTarget, dataToCopy.length, dataToCopy[0].length).setValues(dataToCopy);
}