在工作表之间传输特定的单元格数据

时间:2019-09-04 07:38:27

标签: javascript google-apps-script google-sheets

我有一个问题,我需要将单元格数据从一张纸传输到另一张纸。最后,我要实现的目标是,如果我单击一个按钮,它将把我的数据从一张工作表导入到我当前正在使用的工作表中。

我的原始代码如下:

function C2() {
  var sourceSheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("C2");

var destSheet  = SpreadsheetApp.getActiveSpreadsheet()
  sourceSheet.getRange("A1:I43").copyTo(destSheet.getRange("A1:I43"), {contentsOnly:true});
}

但是,这不适用于我所做的新修改。它会擦除下一张工作表中单元格中的公式,并将其替换为公式所产生的上一张工作表中的值。

我尝试使用此公式,选择了我要传输的所有区域,但是会导致“找不到范围”错误消​​息。

function C1() {
  var sourceSheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("C1");

var destSheet  = SpreadsheetApp.getActiveSpreadsheet()
  sourceSheet.getRange("A2,A4:B16,A21,A23,A25,A27,D3:D22,E4:E22,F3:H22,C24,C26:E31,F25,L1").copyTo(destSheet.getRange("A2,A4:B16,A21,A23,A25,A27,D3:D22,E4:E22,F3:H22,C24,C26:E31,F25,L1"), {contentsOnly:true});
}

如果可以挑选需要的单元格并将其转移到所需的工作表上,而不是仅使用较大范围的单元格(例如“ A1:I43”),那将是理想的选择。任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要定义一个RangeList并遍历所有包含的范围。

如果只想复制值,getValues()setValues()将是对您有用的方法:

function myFunction() {
  var spreadsheet=SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("C2");
  var destSheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var rangeList=sourceSheet.getRangeList(["A2","A4:B16","A21","A23","A25","A27","D3:D22","E4:E22","F3:H22","C24","C26:E31","F25","L1"]);
  var rangeList2=destSheet.getRangeList(["A2","A4:B16","A21","A23","A25","A27","D3:D22","E4:E22","F3:H22","C24","C26:E31","F25","L1"]); 
  for (var i=0;i<rangeList.getRanges().length;i++){
       rangeList2.getRanges()[i].setValues(rangeList.getRanges()[i].getValues());
  }
}