Google Sheets 脚本:按名称引用图表

2024-01-31

我试图在“图表”工作表中创建一个“用户界面”,这将允许他们从下拉列表中选择一个图表,然后它将显示在该下拉列表的正下方。

最终会有大量图表,可能在另一个“图表数据”表上,所以我的想法是将图表从数据表移动到图表表,来回移动。不确定这是否可以做到。

我的问题是找到一种方法在脚本中按名称引用图表,而不是其晦涩的 ID。

我已经完成了图表类等,但没有看到任何方法可以做到这一点。我错过了什么,还是有其他方法来解决这个问题?


我相信你的目标如下。

  • From My issue is finding a way to reference a Chart in script by Name, instead of its obscure ID.,您想要使用特定名称检索特定图表。

在此答案的示例脚本中,图表标题用作具体名称。

示例脚本:

请设置工作表名称。

const ss = SpreadsheetApp.getActiveSpreadsheet();
const chartObj = ss.getSheetByName("Sheet1").getCharts().reduce((o, c) => Object.assign(o, {[c.getOptions().get("title")]: c}), {});
  • 这样,您就可以使用图表标题检索图表对象,如下所示。

    • chartObj["###chart title###"]
  • 当然,您可以给出其他特定名称来代替图表标题。在下面的示例脚本中,使用图表标题对应的具体名称作为键。

      const chartNames = {"sampleChartTitle": "sampleName1",,,};
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const chartObj = ss.getSheetByName("chartSample").getCharts().reduce((o, c) => Object.assign(o, {[chartNames[c.getOptions().get("title")]]: c}), {});
    
    • 在这种情况下,chartObj["sampleChartTitle"]是图表标题的图表对象"sampleName1".

Added 1:

从您的回复中,我了解到您想要从 Google 电子表格中的所有工作表中检索所有图表。为此,下面的示例脚本怎么样?

示例脚本1:

const ss = SpreadsheetApp.getActiveSpreadsheet();
const chartObj = ss.getSheets().reduce((o1, sheet) => {
  o1[sheet.getSheetName()] = sheet.getCharts().reduce((o2, c) => Object.assign(o2, {[c.getOptions().get("title")]: c}), {});
  return o1;
}, []);
  • 在这种情况下,可以通过以下方式检索图表chartObj["sheet name"]["chart title"].

示例脚本2:

当使用for循环修改示例脚本1时,它变成如下。在此示例脚本 2 中,结果值与示例脚本 1 相同。

const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
const chartObj = {};
for (let i = 0; i < sheets.length; i++) {
  const charts = sheets[i].getCharts();
  const temp = {};
  for (let j = 0; j < charts.length; j++) {
    const chart = charts[j];
    temp[chart.getOptions().get("title")] = chart;
  }
  chartObj[sheets[i].getSheetName()] = temp;
}

Added 2:

在上面的脚本中,您可以通过以下方式检索图表对象chartObj[sheetName][chartTitle]。但从您的回复中,我了解到您想要创建一个函数来从工作表名称和图表标题中检索图表对象。为此,下面的脚本怎么样?

function sample(sheetName, chartTitle) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) return null;
  const charts = sheet.getCharts();
  for (let j = 0; j < charts.length; j++) {
    const chart = charts[j];
    if (chart.getOptions().get("title") == chartTitle) {
      return chart;
    }
  }
  return null;
}
  • 在这种情况下,您可以使用以下命令检索图表对象sample(sheetName, chartTitle).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Sheets 脚本:按名称引用图表 的相关文章

  • Chart.js 没有显示在我的视图中

    我有一个使用 angular js 运行的应用程序 我的视图之一应该加载图表 我正在使用 Chart js 但由于某种原因它不起作用 并且我的控制台上没有显示错误 这是我创建图表的函数 scope writeBatteryChart fun
  • 如何检查 Gmail 标签是否有嵌套子标签?

    使用Google Apps脚本 是否有一个功能可以检查Gmail标签是否有嵌套子标签 如果标签有一个或多个子标签 我想将它们从代码序列中排除 没有直接的方法可以从 父 标签获取标签 但是使用简单的方法来获取标签非常简单getUserLabe
  • Gmail 菜单按钮

    我希望编写一个 Google 脚本来存档所有早于某个日期的电子邮件 在该脚本中 我将添加一个自定义按钮 就像在 Google Sheets 中一样 以便我可以运行我的脚本 Google 脚本中是否存在向 Gmail 中的 UI 添加菜单 按
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 如何使用 OnChange() 触发器

    我有一个电子表格以及该电子表格的主副本 每次用户将数据输入单元格时 它都会获取新数据并放入主副本中 然而最近 我注意到一个用户创建了一个新列 该列未被 OnEdit 捕获 于是我查了一下 看到了去年实现的OnChange 但是 我不知道如何
  • 当达到最小起订量时,如何重置 Google 表格中的运行总计?

    请提供数组公式 当达到最小起订量时 您可以帮助重置运行总计吗 这里最小起订量 15 当运行总计等于或大于 15 时 应重新启动 Date Value Desired 12 2022 6 6 01 2023 5 11 02 2023 4 15
  • 如何在R中绘制仪表图表?

    如何在 R 中绘制以下图 Red 30 Yellow 40 Green 30 Needle at 52 所以这里有一个完整的ggplot解决方案 注意 从原始帖子中编辑 在仪表中断处添加数字指示器和标签 这似乎是OP在评论中所要求的 如果不
  • 指向特定工作表的超链接

    我想从另一个电子表格中的超链接打开 Google 表格的特定工作表 我的主电子表格中有不同的链接 每个链接都应该有一个指向同一从属电子表格但指向不同工作表的超链接 我知道超链接功能 但它不会转到特定的工作表 您可以使用此自定义脚本 工具 g
  • Drive.Permissions.insert(值)-Drive API,您可以在“值”下使用数组吗?

    是否可以在此处使用 值 下的数组来阻止我创建组别名电子邮件地址 例如 userValues email protected cdn cgi l email protection email protected cdn cgi l email
  • Charts_flutter x 轴上的标签/文本相互重叠

    我使用flutter中的charts flutter包渲染条形图 但 x 轴上的域标签相互重叠 我有办法解决这个问题吗 有没有办法倾斜文本或增加图表的宽度 使其可以水平滚动 我尝试过寻找任何解决方案 例如 labelspecs 但无法找到解
  • Chart.js:将堆叠条形图的工具提示放置在条形图的顶部

    当我在简单的条形图中有一个条形时 工具提示位于条形的顶部 如果我将鼠标悬停在堆积条形图上 工具提示将放置在average位置 我希望将工具提示始终放在堆叠条形图的顶部 就像简单条形图一样 而不是这种行为 配置位置的唯一两个选项是averag
  • Google电子表格脚本创建特定范围内的数据验证

    我正在尝试这个脚本来创建数据验证 但它总是不起作用 function test validation var Spread SpreadsheetApp getActiveSpreadsheet var Sheet Spread getSh
  • 从 Google 电子表格接收实时更新

    我正在尝试设置与 Google 电子表格的双向同步 我可以使用其数据集将更改推送到 Google 电子表格Google 表格 API V4 https developers google com sheets 现在 我希望每当有人实时或近实
  • 使用 Flot、html、PHP 和 MySql 查询绘制多个图表

    我正在尝试使用 Flot html PHP 和 MySql 查询绘制多个图表 但我陷入了困境 因为我找不到在同一个 html 页面中绘制多个 flot 的方法 为简单起见 在数据库 test db3 映像中包含以下字段 表1 用户名 发送邮
  • 如何使用基于时间的触发器每小时运行一个脚本,仅在工作日的整点运行?

    我只需要在工作日每小时运行一个 Google App Script 脚本 两者之一似乎很容易做到 但将其结合起来我不确定 每小时触发 ScriptApp newTrigger RefreshRates timeBased inTimezon
  • 如何在多个文档中使用 Google Apps 脚本

    我有一个谷歌应用程序脚本 我想在多个文档中使用它 我也可能想稍后在这些文档中更改它 因此我必须使用same所有这些文档中的脚本 而不是该脚本的副本 我知道以下问题可能属于重复问题 但我不愿意接受它的答案 Google Apps 脚本 如何在
  • 插入行 python gdata.spreadsheets.client

    我对专门用于谷歌电子表格的 python gdata API 有点困惑 使用 gdata spreadsheet service 可以很容易地组合一个字典并将其作为新行插入到谷歌电子表格中 如下所示http www mattcutts co
  • Apexcharts 项目栏上的最大宽度

    如何更改 Apexcharts 中项目栏的最大宽度 高度 https apexcharts com https apexcharts com 我有一个水平条形图 其数据是动态加载的 并且用户 项目 的数量各不相同 当用户很少或只有一个用户时
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • 从 Google Apps 脚本运行保存的 bigquery 查询?

    我们经常使用 Google Apps 脚本来运行 BigQuery 查询并将其放入 Google Sheet 中 然而 工作流程很烦人 在 BigQuery 中运行查询 直到正确为止 复制 粘贴到文本编辑器以放入换行斜杠 在应用程序脚本中运

随机推荐