【问题标题】:Google Apps Script - Copy data to different worksheet and appendGoogle Apps 脚本 - 将数据复制到不同的工作表并附加
【发布时间】:2018-07-19 09:35:55
【问题描述】:

我已经查看了我能找到的所有以前的问题,但我似乎永远无法使不同的示例适合我正在尝试做的事情。

我的表格将由不同的用户填写。我希望在 All!H35 的下拉列表中选择“是”后,将“数据”表上的数据复制到格式相同的单独电子表格中。每个团队都会有一个表格(“来源”),每天都会填写,理想情况下,他们都将数据复制到同一个主电子表格(“目的地”)中的下一个空行,创建一个所有的运行列表工作。

[来源][1]

[目的地][2]

编辑: 它部分工作,但只抓取第一个单元格,即使在调整了剩余的列和行之后也是如此。

// Get the contents of a cell in srcSheet
  var range = srcSheet.getRange(1, 1, 16, 38);
  var values = range.getValues();

  // place it in the last row if the destination cell
  var range = srcSheet.getRange(1, 1, 16, 38);
  var values = range.getValues();

终于搞定了。这是供参考的工作代码。

function CopyRange() {
 var sss = SpreadsheetApp.openById('1zxyKx4GsBgD7hRzWT3TSvJto-R-rJoNwLu-0s5zFtko'); //replace with source ID
 var ss = sss.getSheetByName('DataTS1'); //replace with source Sheet tab name
 var range = ss.getRange('A2:AL17'); //assign the range you want to copy
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('1DrCgrLIrybN4a-UqlBsGSJy5p8XBPWNR2ftviwTA5_Y'); //replace with destination ID
 var ts = tss.getSheetByName('All Data'); //replace with destination Sheet tab name

 ts.getRange(ts.getLastRow()+1, 1,16,38).setValues(data); //you will need to define the size of the copied data see getRange()

}

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

如果您想知道如何将数据从一个工作表复制到另一个属于不同电子表格的工作表,那么您可以执行以下操作:

function myFunction() {

  // source spreadsheets
  var sourceSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var srcSheet = sourceSpreadSheet.getSheets()[0];

  //destination spreadsheet
  var destinationSpreadSheet = SpreadsheetApp.openById('SPREADSHEET-ID');
  var destSheet = destinationSpreadSheet.getSheets()[0]; 

  // Get the contents of a cell in srcSheet
  var range = srcSheet.getRange(1, 1);
  var values = range.getValues();

  // place it in the last row if the destination cell
  var range = srcSheet.getRange(1, 1);
  var values = range.getValues();
  // get the last row
  var lastRow = destSheet.getLastRow();
  destSheet.getRange(lastRow + 1,1).setValue(values);

}

请注意,您可以复制一个范围而不是单个单元格。请查看以下链接了解更多信息:

https://developers.google.com/apps-script/reference/spreadsheet/range

注意:我注意到您的源电子表格和目标电子表格不是“格式相同”,但在您的问题中您说它们是相同的

【讨论】:

  • 谢谢。如何设置它以将其粘贴到最后一行?我总是看到 LastRow()+1 之类的东西,然后是一堆其他数字,但我找不到更好的解释。我应该说这些工作表具有相同的布局,而不是格式。感谢收看。
  • 它开始工作了,但只提取第一个单元格中的数据。我上面的编辑有更多信息。
【解决方案2】:

确实感谢您的代码,在使用“copyTo”卡住之后,我根据您的代码做了一些改进

function copyPaste() {
  var ss = SpreadsheetApp.openById("xxxx");
  var source = ss.getSheetByName("sheet1");
  var rangeSource = source.getDataRange();
  var data = rangeSource.getValues();
  var lr = rangeSource.getLastRow();
  var lc = rangeSource.getLastColumn();
  Logger.log(data);


  var sss = SpreadsheetApp.openById("xxxxxx");
  var target = sss.getSheetByName("sheet2")
  target.getRange(target.getLastRow()+1,1,lr,lc).setValues(data);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2017-11-25
    相关资源
    最近更新 更多