从工作表复制列以使用GAS在“存档”工作表的最后一列添加

时间:2013-01-09 18:25:35

标签: google-apps-script google-sheets

抱歉我的英文。 ^^

嗯,我发现了一个要从工作表复制到另一个工作表的脚本。 我的问题是:它的行副本。 我想复制列并在脚本运行时向lastcolumn添加2列。

它成为一个问题,因为列没有a1notification。 A = 1,B = 2等 copyTo想要A1notification。

继承我的剧本:

function Archiv() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("sheetid");
var source_sheet = ss.getSheetByName("sheetname");
var target_sheet = target.getSheetByName("sheetnametarget");
var source_range = source_sheet.getRange("D4:E89");
var last_col = target_sheet.getLastColumn();
target_sheet.insertColumnAfter(last_col);
var target_range = target_sheet.getRange(">>>>(lastcol+1)<<<<4:>>>>>(lastcol+2)<<<<89");
source_range.copyTo(target_range, {contentsOnly:true});
}

脚本必须每周一运行以存档2列的内容。 我希望你能理解我的愿望。 我测试了很多东西,但没有任何帮助。 :(

非常感谢提前。

塞巴斯蒂安

1 个答案:

答案 0 :(得分:0)

您可以使用其他范围选择模式,这将使事情变得非常简单,请参阅this doc,使用整数作为行号和列号。

您的代码可能会变成这样:

function Archiv() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById("sheetid");
  var source_sheet = ss.getSheetByName("sheetname");
  var target_sheet = target.getSheetByName("sheetnametarget");
  var source_range = source_sheet.getRange("D4:E89");
  var last_col = target_sheet.getLastColumn();
  while(target_sheet.getMaxColumns()<=last_col+2){// add columns only if necessary
  target_sheet.insertColumnAfter(last_col)}
  var source_values = source_range.getValues();
  var target_range = target_sheet.getRange(4,last_col+1,source_values.length,2);// row Nr4, starting on last column+1, 2 columns width and 89-4 rows heigth
  target_range.setValues(source_values);
}

我使用getValues()setValues()代替copyTo()返回了错误:目标和来源必须位于同一电子表格中