Google sheets 谷歌文档,从谷歌表单链接到动态范围

Google sheets 谷歌文档,从谷歌表单链接到动态范围,google-sheets,google-docs,Google Sheets,Google Docs,按照这个指南,我能够将我的谷歌工作表中的数据链接到我的谷歌文档中 是否有一种方法可以在表格缩小和增大时自动更新范围大小?您可以执行以下操作: 创建一个新的命名范围,其中包括表的当前范围(ref:) 使用将该命名区域链接到所需位置 在电子表格上,单击Tools>scripteditor打开绑定脚本,并复制以下代码。此函数用于检索所需的命名范围,并使用表的当前维度对其进行更新: 安装一个将按指定周期触发updateNameRange。您可以手动(跟随),也可以编程。为了以编程方式安装此程序,请复制

按照这个指南,我能够将我的谷歌工作表中的数据链接到我的谷歌文档中


是否有一种方法可以在表格缩小和增大时自动更新范围大小?

您可以执行以下操作:

  • 创建一个新的命名范围,其中包括表的当前范围(ref:)
  • 使用将该命名区域链接到所需位置
  • 在电子表格上,单击
    Tools>scripteditor
    打开绑定脚本,并复制以下代码。此函数用于检索所需的命名范围,并使用表的当前维度对其进行更新:
  • 安装一个将按指定周期触发
    updateNameRange
    。您可以手动(跟随),也可以编程。为了以编程方式安装此程序,请复制并运行一次类似以下的函数:
  • 注:
    • 上一个示例使用的参数设置为1,因此范围将每分钟更新一次。您可以找到替代频率的方法
    • 在上面的示例中,表格位于名为
      Sheet1
      的工作表中,其命名范围标题为
      MY_range
      ,从单元格
      A1
      开始。如果不是您的情况,请更改电子表格中的所有内容
    • 我假设您已经知道如何链接命名范围

    我认为您可以链接到一个命名范围,并通过触发器通过应用程序脚本以编程方式更新该命名范围。哪些操作会导致表收缩和增长?以及如何确定哪些是表格的一部分,哪些不是?@Iamblichus-这听起来是一个可行的解决方案。该表是从Jira插件到Google文档生成的。我过去的工作流程都是基于Office360的,所以我决定改用谷歌文档。至于收缩和增长,这取决于符合特定标准的Jira问题的数量。好吧,如果表编辑是编程的而不是手动的,那么我建议的解决方案就不能工作,因为
    onEdit
    只适用于用户编辑。另一种选择是使用时间驱动触发器。这样,范围可以定期更新(最大频率为每分钟)。可以吗?此外,这些值是实际写入电子表格的,还是通过公式填充的?@Iamblichus,这些值是写入电子表格的。从Google文档更新时,时间驱动触发器如何工作。当工作表处于焦点/使用状态时,时间驱动触发器是否会更新?听起来唯一的方法是编程解决方案;它的功能非常强大,我一直在考虑对所有行进行forEach,但该功能非常出色。只要前一行中有一些数据,它也会处理孤立的cel。此外,我将脚本绑定到一个按钮,而不是一个定时触发器,因为有一个更改源数据的过程。
    const SHEET_NAME = "Sheet1"; // Change according to your preferences
    const NAMED_RANGE_NAME = "MY_RANGE"; // Change according to your preferences
    
    function updateNamedRange() {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = ss.getSheetByName(SHEET_NAME);
      const namedRanges = ss.getNamedRanges();
      const namedRange = namedRanges.find(namedRange => namedRange.getName() === NAMED_RANGE_NAME);
      const range = sheet.getRange("A1").getDataRegion();
      namedRange.setRange(range);
    }
    
    function installTimeTrigger() {
      ScriptApp.newTrigger("updateNamedRange")
      .timeBased()
      .everyMinutes(1)
      .create();
    }