复制和过去命名的范围/整行

在Google表格上,我一直在使用以下脚本在复制的行中复制并粘贴所有先前的行。

  var spreadsheet = Spreadsheetapp.getactive();
  spreadsheet.getRange('20:20').activate();
  spreadsheet.getactiveSheet().insertRowsBefore(spreadsheet.getactiveRange().getRow(),1);
  spreadsheet.getactiveRange().offset(0,1,spreadsheet.getactiveRange().getNumColumns()).activate();
  spreadsheet.getRange('21:21').copyTo(spreadsheet.getactiveRange(),Spreadsheetapp.CopypasteType.PASTE_NORMAL,false);
  spreadsheet.getRange('L20').activate();
  spreadsheet.getactiveRangeList().clear({contentsonly: true,skipFilteredRows: true});
  spreadsheet.getRange('H20').activate();
  spreadsheet.getactiveRangeList().clear({contentsonly: true,skipFilteredRows: true});
};

由于我的插入物会彼此相邻,因此每当我使用顶部的插入物时,都会将要复制的行更改为其他插入物。我想删除对表达式('20:20')的依赖,并认为NamedRange是这种方式。

是否可以在一张工作表中复制整行或命名范围的值并将其粘贴到同一工作表中,而只需在上方创建一行?

zhuo67760212 回答:复制和过去命名的范围/整行

使用Porperties Service [1],您可以解决您的问题,我编辑了链接到示例电子表格的代码,如下所示:

function PlusMP() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('5:5').activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(),1);
  spreadsheet.getActiveRange().offset(0,1,spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('6:6').copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_NORMAL,false);
  spreadsheet.getRange('L5').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true,skipFilteredRows: true});
  spreadsheet.getRange('H5').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true,skipFilteredRows: true});

  //Set offset property
  var scriptProperties = PropertiesService.getScriptProperties();
  var offset = Number(scriptProperties.getProperty('offset'));

  if ( offset == null) {
    scriptProperties.setProperty('offset',1);
  }
  else {
    scriptProperties.setProperty('offset',offset + 1);
  }
};

function PlusCOMP() {
  //Get offset property
  var scriptProperties = PropertiesService.getScriptProperties();
  var offset = Number(scriptProperties.getProperty('offset'));

  if(offset == null) {
    offset = 0;
  }
  var row = 10 + offset;
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange(row + ':' + row).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(),spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange(row + ':' + row).copyTo(spreadsheet.getActiveRange(),false);
  spreadsheet.getRange('L' + row).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true,skipFilteredRows: true});
  spreadsheet.getRange('H' + row).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true,skipFilteredRows: true});
};

function resetOffset() {
      PropertiesService.getScriptProperties().setProperty('offset',0);
}

运行PlusMP函数时,它将设置或更新offset属性,而运行PlusCOMP函数时,它将使用相同的offset属性相应地插入行。

[1] https://developers.google.com/apps-script/reference/properties/properties

本文链接:https://www.f2er.com/3143829.html

大家都在问