【问题标题】:Google Sheet - Copy Rows from Multiple Sheets into a Single Summary SheetGoogle 工作表 - 将多张工作表中的行复制到一个汇总表中
【发布时间】:2020-01-10 05:00:25
【问题描述】:

我正在尝试维护单独的工作表,这些工作表在一个谷歌电子表格中聚合成一个汇总表,同时保持格式。我有一个代码可以将单独工作表的内容复制到摘要中,但第二个工作表会覆盖摘要工作表中的第一个工作表。这就是我所拥有的-

function importTable2() {
  // Source 1
  var sourceSheet1 = SpreadsheetApp.openById("ID").getSheetByName("1");
  var sourceRange1 = sourceSheet1.getDataRange();

  // Source 2
  var sourceSheet2 = SpreadsheetApp.openById("ID").getSheetByName("2");
  var sourceRange2 = sourceSheet2.getDataRange();  

  // Destination
  var destSS = SpreadsheetApp.openById("ID");
  var destSheet = destSS.getSheetByName("Summary");
  var destRange = destSheet.getDataRange();
  destSheet.clear();

  // Copy 1
  var copiedsheet = sourceRange1.getSheet().copyTo(destSS);
  copiedsheet.getRange(sourceRange1.getA1Notation()).copyTo(destRange);
  copiedsheet.getRange(sourceRange1.getA1Notation()).copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS, false);
  destSS.deleteSheet(copiedsheet);
  
    // Copy 2
  var copiedsheet2 = sourceRange2.getSheet().copyTo(destSS);
  copiedsheet2.getRange(sourceRange2.getA1Notation()).copyTo(destRange);
  copiedsheet2.getRange(sourceRange2.getA1Notation()).copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS, false);
  destSS.deleteSheet(copiedsheet2);

}

我认为这是因为我的目标范围是相同的,但我似乎无法弄清楚如何获得第二个目标范围(用于工作表 2 的数据),它将正好低于初始目标范围(来自工作表 1 的数据) ) 因为表 1 中的数据今天可能有 10 行,但明天可能有 20 行。

关于如何让源 2 放入源 1 数据下的目标工作表有什么想法吗?

【问题讨论】:

  • 您可以将每个范围累积到一个数组 [][] 并将该数组提供给目标工作表

标签: google-apps-script google-sheets


【解决方案1】:

尝试在脚本的“// Copy 2”部分重置destRange的值:

    // Copy 2
  var copiedsheet2 = sourceSheet2.copyTo(destSS);
  destRange = destSheet.getRange(destSheet.getLastRow() + 1, 1, sourceRange2.getLastRow(), sourceRange2.getLastColumn());
  copiedsheet2.getRange(sourceRange2.getA1Notation()).copyTo(destRange);
  copiedsheet2.getRange(sourceRange2.getA1Notation()).copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS, false);
  destSS.deleteSheet(copiedsheet2);

【讨论】:

  • 这可以将源 2 行放在源 1 行下方(谢谢!),但是当我重新运行该函数时,源 1 行会填充到摘要选项卡中两次(如果我有三个源表,如果我有四个源表,则为四个等)我尝试向函数添加一个“清晰”部分(如下),但它仍然会为第一个之后的函数中的尽可能多的源生成源 1 数据跑。 var sheet = SpreadsheetApp.getActive().getSheetByName('Summary'); sheet.getRange('A:O').clearContent();
  • 哦!我刚刚为脚本的 Copy 1 部分添加了一个 destRange 重置,这为后代解决了问题!非常感谢,ADW!
猜你喜欢
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
相关资源
最近更新 更多