Google Apps脚本 - 如何在下一个可用列中将列复制到另一个工作表

时间:2014-06-23 01:56:57

标签: google-apps-script google-sheets

我有一个要求,我需要从一列(或更多)获取值,并将它们复制到下一个可用列中的另一个工作表。我写了这样的剧本。它会复制一列中的值,但无法继续前进,以便将同一源列中的新数据的另一个快照发送到目标表的下一个空闲列。

*//keep a copy of Sales numbers for every month
function readSalesNum() {
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales plan");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SalesRecordsMonthly");

// Copy from 17th row, 4th column, all rows for one column 
var rangeToCopy = sheetFrom.getRange(17, 4, sheetFrom.getMaxRows(), 1);

//Paste to another sheet from first cell onwards
rangeToCopy.copyTo(sheetTo.getRange(1, 1));
}*

我很抱歉格式不佳:(我需要修改此脚本以提及源表中的任何列集并将它们复制到目标表。对于新月,它应该在下一组列中执行相同操作,而不是像现在一样覆盖。而且,副本只应该发生在缺少的值上。我知道脚本中有一个ContentOnly选项,但不知道如何使用它。

3 个答案:

答案 0 :(得分:4)

如果我理解正确的话,这里有一个代码可以做你想要的,即从第17行的第4行中的一个工作表中获取值并将其复制到另一个工作表而不覆盖从第1行开始的列

function readSalesNum() {
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales plan");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SalesRecordsMonthly");

// Copy from 17th row, 4th column, all rows for one column 
var valuesToCopy = sheetFrom.getRange(17, 4, sheetFrom.getLastRow(), 1).getValues();

//Paste to another sheet from first cell onwards
sheetTo.getRange(1,sheetTo.getLastColumn()+1,valuesToCopy.length,1).setValues(valuesToCopy);
}

测试表here,制作副本以运行脚本 - 仅查看

这仅涵盖问题的第一部分,第二部分有点令人困惑(如上文评论中所述)。

答案 1 :(得分:0)

采用这种方法,也可以将整个第四列和第17行向前作为一列附加到另一张纸上。

  var sheetfrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheetfrom');
  var sheetto = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheetto');

  sheetfrom.getRange(17, 4, sheetfrom.getLastRow(), 1).copyTo(sheetto.getRange(1, 
  sheetTo.getLastColumn()+1, sheetfrom.getLastRow()-17, 1), {
    contentsOnly: true
  });

这也克服了从某些公式输出复制数据的空单元格问题。

答案 2 :(得分:-1)

试试这个

*//keep a copy of Sales numbers for every month
function readSalesNum() {
  var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales plan");
  var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SalesRecordsMonthly");

  // Copy from 17th row, 4th column, all rows for one column 
  var rangeValues = sheetFrom.getRange(17, 4, 1, sheetFrom.getMaxRows()).getValues();

  //Paste to another sheet from first cell onwards

  sheetTo.appendRow(rangeValues[0]);

}

这将根据您建议的范围执行您想要的操作。但是,看起来你正试图获得两个不同的范围,所以你必须适应它。