【问题标题】:google apps script - write data in next empty row谷歌应用程序脚本 - 在下一个空行中写入数据
【发布时间】:2021-04-26 22:02:16
【问题描述】:

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

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

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

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);

    }
  }
}

这是数据库的链接(谷歌表):

https://docs.google.com/spreadsheets/d/1usRuvazJlxAGvF0G2-e00MEQ_AjMCOnWopBFX4qfUcc/edit#gid=0

Screenshoot

【问题讨论】:

  • 我没有看到您在哪里指定了第二个电子表格。
  • 整个散文都在一个电子表格上,就在工作表的左右两侧
  • 嗨!我发布了一个答案,解释了如何做到这一点。我不确定您是要复制包含Copy 的行,还是not 包含它的行。另外我不确定是否应该复制列D。无论如何,我希望大体思路清晰。
  • 嗨!,包含 COPY 的行仅作为过滤器以防止数据重复,根据代码,如果(行 [5]!= Copy)然后运行脚本。动态数据是A、B、C列,我要连续写下来的数据库是E、F、G列,不替换之前的数据(追加行)
  • @Iamblichus 非常感谢...

标签: javascript java google-apps-script google-sheets


【解决方案1】:

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

如果是这样,您可以:

代码sn-p:

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);
}

【讨论】:

  • @lamblichus。你好!你理解我需要什么是正确的。完美无瑕。我已经尝试过这种方法,它可以按照我想要的方式工作,谢谢!
【解决方案2】:

将数据复制到电子表格中的不同选项卡可能是最简单的方法。尝试用以下代码替换代码中的 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]]));

【讨论】:

  • 嗨!我已经尝试过这种方法并且它有效,但我需要的是复制到一个工作表中。这段代码给了我不同项目的灵感。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多