用公式复制多列

时间:2018-08-22 16:40:13

标签: google-apps-script google-sheets

我正在尝试创建一个Google脚本功能来创建新的一天。 我想要的是将 BO 列的内容复制到最后一个空列旁边的 CA ,如图所示。

Docs

在脚本中,我有以下代码:

var columnsPerDay = 13;
var sheetName = 'Principal';
function NuevoDia() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName(sheetName);

  var lastDayColumn = sheet.getLastColumn();
  var lastDayRow = sheet.getLastRow();
  var lastDayRange = sheet.getRange(1, lastDayColumn, sheet.getMaxRows(), columnsPerDay);
  var nextDayRange = sheet.getRange(1, lastDayColumn + 1, sheet.getMaxRows());
  lastDayRange.activate();

//  var lastDayRangeValues = lastDayRange.getValues();
  //lastDayRange.copyTo(sheet.getRange(1, lastDayColumn + 13, sheet.getMaxRows()))

  //lastDayRange.activate();
/*
  var lastDayRangeValues = lastDayRange.getValues();
  nextDayRange.setValues(lastDayRangeValues);
*/ 
 lastDayRange.copyValuesToRange(sheet, lastDayRange.getLastColumn()+1, lastDayRange.getLastColumn()+columnsPerDay, 13, lastDayRange.getLastRow())
};

如您所见,代码中有很多注释,但尝试失败的次数不同...

1 个答案:

答案 0 :(得分:1)

拷贝范围被错误引用。 getRange(start row, start col, # rows, # cols)。您的范围是:开始行= 1,开始col =最后一个col,#行=总行,#cols =13。这就是为什么只复制最后一列的原因。

更改:

var lastDayRange = sheet.getRange(1, lastDayColumn, sheet.getMaxRows(), columnsPerDay);

至:

var lastDayRange = sheet.getRange(1, lastDayColumn - 12, sheet.getMaxRows(), columnsPerDay);

(再次查看您的图片后,我从评论中更改了lastDayColumn的实现,并意识到您不一定从原点开始工作。)


我认为您还可以简化复制步骤。发件人:

lastDayRange.copyValuesToRange(sheet, lastDayRange.getLastColumn()+1, lastDayRange.getLastColumn()+columnsPerDay, 13, lastDayRange.getLastRow())

收件人:

lastDayRange.copyTo(sheet.getRange(1, lastDayColumn +1));

(除非您尝试一次粘贴多天,否则copyValuesToRange()可能会更好,但是可以清理实现)

lastDayRange.copyValuesToRange(sheet, lastDayColumn +1, lastDayColumn +columnsPerDay, 1, lastDayRange.getLastRow())

让我知道这是否存在任何问题。