首页 > 解决方案 > 将特定单元格数据从工作表传输到工作表

问题描述

我有一个问题,我需要将单元格数据从一张纸转移到另一张纸上。我最终想要实现的是,如果我点击一个按钮,它会将我的数据从一张表导入到我当前使用的表中。

我的原始代码如下所示:

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”),那将是理想的。非常感谢任何和所有帮助。

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


您需要定义一个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());
  }
}

推荐阅读