我正在寻求改进用于复制数据的代码

时间:2019-07-18 15:46:59

标签: google-apps-script google-sheets

我通过在Google表格中记录宏来编写一些代码。它将数据复制并粘贴到列中。但这是一种笨拙的复制方式,我想做得更好。

我目前正在使用此代码。

    function import2() {

      var spreadsheet = SpreadsheetApp.getActive();

      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Road MT'), 
    true);
      spreadsheet.getRange('C2').activate();   
spreadsheet.getRange('Imported!A2:A').copyTo(spreadsheet.getActiveRange(), 
    SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

我也使用了类似于下面的代码,但是此代码的问题是,如果行实际上不存在,则会引发错误。它不会创建新的行来填充数据。

    var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRange('\'Round Up\'!F:F').activate();
      spreadsheet.getActiveRangeList().setNumberFormat('@')
      var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      range.getRange("\'Road MT\'!AF2").setFormula('=\'Round Up\'!F2');

      var lr = range.getLastRow();
      var fillDownRange = range.getRange(2, 32, lr-1);
      range.getRange("\'Road MT\'!AF2").copyTo(fillDownRange);

1 个答案:

答案 0 :(得分:0)

我使用脚本来做类似的事情。它不会按照自己的方式创建行,但是如果您知道粘贴的范围,则可以将要复制的数据范围设置为尚不存在的行,它将使它们成为行。

  var spreadsheet = SpreadsheetApp.getActive();

  //this get what you want to copy and it's length
  var sheetToCopy = spreadsheet.getSheetByName(<name>); //or similar
  var rangeToCopy = sheetToCopy.getRange(<yourRange>)
  var dataToCopy = rangeToCopy.getValues()
  var nRowsToCopy = dataToCopy.length // or rangeToCopy.getLastRow()
  var nColsToCopy = rangeToCopy.getLastColumn() //because dataToCopy[0].lenght might vary from dataToCopy[5].lenght

  //this get get where you wanna copy it and set the proper range so it can be pasted
  var fillDownSheet = spreadsheet.getSheetByName(<name>); //or similar
  var fillDownRow = fillDownSheet.getLastRow()+1;
  var fillDownRange = fillDownSheet.getRange(fillDownRow, <yourColIndex>, nRowsToCopy, nColsToCopy);

  //this paste your data
  fillDownRange.setValues(dataToCopy);

或者,您也可以像这样使用copyToDestination()method

var spreadsheet = SpreadsheetApp.getActive();

var sheetToCopy = spreadsheet.getSheetByName(<name>); //or similar
var rangeToCopy = sheetToCopy.getDataRange()
var nRowsToCopy = rangeToCopy.getLastRow()
var nColsToCopy = rangeToCopy.getLastColumn()

var fillDownSheet = spreadsheet.getSheetByName(<name>); //or similar
var fillDownRow = fillDownSheet.getLastRow();
var fillDownRange = fillDownSheet.getRange(fillDownRow, 1);
var fillDownGridID = fillDownRange.getGridId();

rangeToCopy.copyValuesToRange(fillDownGridID, 1, nRowsToCopy, fillDownRow, (fillDownRow+nColsToCopy))

但是您的工作表上至少需要有一个空行,否则它将被覆盖。