【问题标题】:Copy cell values from one spreadsheet to a second AFTER the second has been named after the first在第二个以第一个命名后,将单元格值从一个电子表格复制到第二个
【发布时间】:2019-11-15 15:57:09
【问题描述】:

我们有两种不同的电子表格模板;由多个链接选项卡组成的销售电子表格 (公式工作正常,我们喜欢布局)。我们还有一个管理电子表格,其中包含几个相互关联的选项卡(公式有效,我们也喜欢这个布局)。

它们都是我们为每个新项目复制、重命名和使用的模板,同时将原始和相关公式分别保留为“空白销售模板”和“空白管理模板”。

并非我们为其创建提案的所有项目实际上都已签约,因此,我们通常根本不使用管理模板。当我们这样做时,我们有一个脚本允许我们从销售电子表格内的按钮复制、命名和放置管理电子表格。这工作正常,但只有 Sales 文件名被复制到 Man 文件,我们也想复制单元格数据。

当单击销售文件中的“复制人文件”按钮时,我们希望将销售文件封面表中指定的单元格值复制到人文件封面表中的不同单元格。看起来很容易...听起来很容易....它不是!

两个男人。电子表格和销售电子表格包含类似摘要的“封面表”选项卡,尽管它们之间的数据大多是多余的,但格式不同。 我怀疑这不能以这种方式完成,因为我们需要在创建新文件时复制数据。任何人至少可以确认这是可能的吗?

这是目前为止的代码:

 function CreateManFile9() {        
  var copyMan = DriveApp.getFileById("Man. Template").getId();    
  var toFolder = DriveApp.getFolderById("Man. Template folder");       
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();  
      //button in one cell of active sheet runs this script
  var sheetName = sheet.getRange('B3').getDisplayValue();                // 
   //Can't we grab additional cells, at this point, and copy them over too?

 DriveApp.getFileById(copyMan).makeCopy(sheetName, toFolder);  

}

【问题讨论】:

  • 那么您要复制的范围是什么?您希望将格式与它们一起复制还是只复制值?
  • 你好库珀!单元格 B4、B5、B10、D11 和 E4 从活动工作表到 B8、B10、D15、E3 和 J14,分别到复制的人。文件。理想情况下,在我的代码最后发表评论时。我们可以在那个时候在代码的那个地方做,还是需要不同的方法?而且,在这一点上,我认为只有价值观就可以了。
  • 所以,问题是:您如何要求应用程序脚本 1) 获取活动工作表中的单元格,2) 将值复制到另一个工作表和第二个工作表的不同单元格中。使用 .get 方法,我无法获取指定的单元格,然后将它们发送到不同电子表格的其他指定单元格。

标签: google-apps-script google-sheets


【解决方案1】:
function copyValuesSrcToDes(srcId,srcshname,srcrgA,desId,desshname,desrgA) {
  var src=SpreadsheetApp.openById(srcId);
  var srcsh=src.getSheetByName(srcshname);
  var des=SpreadsheetApp.openById(desId);
  var dessh=des.getSheetByName(desshname)
  srcrgA.forEach(function(sA1,i){
    dessh.getRange(desrgA[i]).setValue(srcsh.getRange(sA1).getValue());
  });
}

srcId - 源电子表格 ID

srcshname = 源工作表名称

srcrgA - 以 A1 表示法复制的单元格数组

desId - 目标电子表格 ID

desshname - 目标工作表名称

desrgA = 以 A1 表示法复制到的单元格数组

这是我认为你需要做的:

function CreateManFile9() {        
  var copyMan = DriveApp.getFileById("Man. Template").getId();    
  var toFolder = DriveApp.getFolderById("Man. Template folder");       
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();  
  var sheetName = sheet.getRange('B3').getDisplayValue();                // 
  var file2=DriveApp.getFileById(copyMan).makeCopy(sheetName, toFolder);  
  var srcId=copyMan;
  var srcshname=sheet.getName();
  var srcrgA=['B4','B5','B10','D11','E4'];
  var desId=file2.getId();
  var desshname=SpreadsheetApp.openById(desId).getSheets()[0].getName();
  var desrgA=['B8','B10','D15','E3','J14'] 
  copyValuesSrcToDes(srcId,srcshname,srcrgA,desId,desshname,desrgA)

【讨论】:

  • 感谢您让我知道这是可能的。我尚未对其进行测试,但可以将此代码添加到我目前在(我的代码的)最后一条评论中所拥有的内容中,还是保留并添加到现有功能中?我们正在尝试在创建文件时复制相关的单元格数据……也就是说,在运行函数 createManFile9 时。
  • 我已经想到使用数组来传输数据,但我还没有找到一种方法来使用现有函数来完成这项工作。这可能吗?
  • 这是一个函数。给它正确的参数,它会为你做传输。
  • srcrgA=['B4','B5','B10','D11','E4'] srcrgB=['B8','B10','D15','E3','J14']
  • 但它无法正常工作。我在哪里将您的代码放入我现有的代码中以使其工作?您注意到现有的代码和功能了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多