Google sheets 将公式(非值)从主工作表推送到子工作表 我的问题是: 我有各种各样的工作人员将数据输入到表格中。每个员工都有自己的电子表格副本,但所有员工的公式都是相同的 当我需要更新公式时,这是非常痛苦的,因为它需要我更新每个电子表格中的公式 问题:

Google sheets 将公式(非值)从主工作表推送到子工作表 我的问题是: 我有各种各样的工作人员将数据输入到表格中。每个员工都有自己的电子表格副本,但所有员工的公式都是相同的 当我需要更新公式时,这是非常痛苦的,因为它需要我更新每个电子表格中的公式 问题:,google-sheets,import,google-sheets-formula,Google Sheets,Import,Google Sheets Formula,有没有办法让我拥有一个只包含公式的主电子表格,这些公式将被推送到每个电子表格中?因此,我只需要更改主文件,它会自动更新子电子表格中的公式 我试图在互联网上寻找这个,但似乎不可能。这个问题以前在堆栈溢出中也被问过,答案是“不可能”。我想再次询问,希望这个问题有一个新的解决方案 以下是一些示例电子表格: 这是主电子表格与公式的链接: 这是一个示例子电子表格的链接: 黄色单元格是我放置公式的单元格 绿色单元格是工作人员放置数据的单元格。使用以下代码将公式添加到所有单元格中: 函数insfor

有没有办法让我拥有一个只包含公式的主电子表格,这些公式将被推送到每个电子表格中?因此,我只需要更改主文件,它会自动更新子电子表格中的公式

我试图在互联网上寻找这个,但似乎不可能。这个问题以前在堆栈溢出中也被问过,答案是“不可能”。我想再次询问,希望这个问题有一个新的解决方案

以下是一些示例电子表格:

  • 这是主电子表格与公式的链接:

  • 这是一个示例子电子表格的链接:

  • 黄色单元格是我放置公式的单元格


    绿色单元格是工作人员放置数据的单元格。

    使用以下代码将公式添加到所有单元格中:

    函数insformula(){
    var ss=SpreadsheetApp.getActive();
    var master=SpreadsheetApp.openById('ID');
    var staff=SpreadsheetApp.openById('ID');
    var masterrange=master.getRange('A1:B');
    var staffrange=staff.getRange('B1:B');
    var lastrow=staff.getLastRow();
    var公式=masterrange.getValues();
    staff.getActiveSheet();
    staffrange.clearContent();
    对于(i=2;i介绍
    下面有一个脚本,您可以自己配置,但它确实需要一些设置,所以我尝试尽可能完整地列出说明

    • 您需要能够获取所有员工的工作表ID。这可以在每个工作表的URL中找到
    https://docs.google.com/spreadsheets/d/{这是ID}/edit#gid=0
    
    它将是一个随机字符的长字符串

    • 您还需要具有编辑权限或是所有图纸的所有者
    • 您可以将母版纸保密
    • 请注意。它应该适合您的使用,但若您有许多子工作表,则可能会遇到配额限制
    提议的解决办法
  • 打开你的母版纸
  • 转到“工具”>“脚本编辑器”
  • 将空函数替换为以下代码:
  • 函数更新公式(e){
    //此处插入所有单元格的各个范围
    //它将包含您要跨越的公式
    变量公式范围=[“A2”,“B2”]
    //此处列出具有以下权限的员工的姓名或ID:
    //工作表的相应ID。
    变量子表={
    user1:“此处为您的第一个孩子ID”,
    用户2:“这里是您的第二个孩子ID”
    }
    //如果要更改图纸名称,请在此处更改
    var sheetName=“Sheet1”
    试一试{
    var ss=e.source.getActiveSheet().getName()
    var rng=e.range.geta1表示法()
    var formulaToSet=e.range.getFormula()
    if(ss==图纸名称和公式范围。包括(rng)){
    for(子表中的常量用户){
    var userSheet=SpreadsheetApp.openById(childSheets[user])
    userSheet.getRange(rng).setFormula(formulaToSet)
    }
    }
    }catch(err){Logger.log(err)}
    }
    函数安装(){
    var sheet=SpreadsheetApp.getActive();
    ScriptApp.newTrigger(“更新公式”)
    .forSpreadsheet(SpreadsheetApp.getActive())
    .onEdit()
    .create();
    }
    
  • 在菜单中单击“查看”>“显示清单文件”
  • 打开左侧显示的文件“appsscript.json”
  • oauthScopes
    部分中添加:
  • {
    “时区”:“欧洲/巴黎”,
    “依赖项”:{
    },
    “例外记录”:“STACKDRIVER”,
    “runtimeVersion”:“V8”,
    “oauthScopes”:[
    "https://www.googleapis.com/auth/spreadsheets"
    ]
    }
    
  • 返回到原始脚本文件
  • 您应该会看到这样一个下拉框:
  • 选择
    updateFormulas
    ,然后按“播放”按钮,该按钮将运行脚本
  • 它应该要求您授予权限,授予它们
  • 然后选择
    install
    并运行它,您只需运行一次
  • 配置
    updateFormulas
    函数,其中包含要推送到子电子表格的每个公式的范围以及要推送到的每个表格的用户和ID。此部分:
  • //此处插入所有单元格的各个范围
    //它将包含您要跨越的公式
    变量公式范围=[“A2”,“B2”]
    //此处列出具有以下权限的员工的姓名或ID:
    //工作表的相应ID。
    变量子表={
    user1:“此处为您的第一个孩子ID”,
    用户2:“这里是您的第二个孩子ID”
    }
    //如果要更改图纸名称,请在此处更改
    var sheetName=“Sheet1”
    
  • 通过更改主控表中的公式来测试它,并观察它的传播
  • 解释和参考
    • 此脚本使用。每次在工作表上进行编辑时,此脚本都将运行。它将检查编辑是否在“Sheet1”上,以及编辑是否在“formulaRanges”中定义的范围内。如果这些是真的,则将编辑的范围复制到子工作表
    • 它读、写公式和详细的方法。例如:

    你是说每个员工都有自己的电子表格副本吗?是的,这是真的!所有员工都有自己的电子表格副本,具有相同的公式,但根据每个公式输入的数据不同。一种选择是将所有公式保留在主控表中,并让任何员工工作表在主控表上输入数据。我尝试了输入数据,但我不认为这是解决方案,因为公式没有从一张纸转移到另一张纸