【问题标题】:Identify specific charts on google sheets using google script使用谷歌脚本识别谷歌表格上的特定图表
【发布时间】:2019-07-10 15:14:29
【问题描述】:

我有一个谷歌幻灯片演示文稿,其中包含一个与谷歌电子表格相关的图表。我创建了一个插件(谷歌脚本),使用它我可以粘贴表格 url 并按 id 获取所有可用图表。

我无法克服仅使用生成的 id 来识别我需要的图表的问题。

现在我可以这样做:

  var spreadSheetContainingChartAndData = Sheets.Spreadsheets.get(sheetsId)
  var allSheets = spreadSheetContainingChartAndData.sheets
  var allChartsOnTheOnlyExistingSheet = dataSheet.sheets[0].charts
  var firstChart = allChartsOnTheOnlyExistingSheet[0]

  var chartId = firstChart.chartId

理想情况下,我希望通过某种形式的用户定义标识符来查找图表,如下所示:

 var chartId = findByAnythingElse(allChartsOnTheOnlyExistingSheet, 'user-defined-tag')

用例是拥有一个电子表格模板,其中包含客户数据和许多可视化所述数据的图表。 每当有人想要进行演示时,他都可以单击插件菜单并让某些幻灯片填充特定的图表,这些图表将被裁剪并调整为预定义的格式。

【问题讨论】:

  • 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
  • @Tanaike 为延迟道歉。你的答案是我得到的最接近的答案。实际上,我对某种形式的元数据而不是标题、副标题等更感兴趣,因为我不想用模板设计者未设置的东西来修改模板,并且这些东西可能会因外观修改而改变(即我依赖图表的标题,但设计更改为在幻灯片中不包含图表标题)。虽然现在 altText 似乎已经足够了。
  • 感谢您的回复和其他信息。我很高兴你的问题得到了解决。也谢谢你。

标签: google-apps-script


【解决方案1】:
  • 您想从电子表格中的所有图表中检索 chartId。
  • 您想使用特定标签搜索chartId。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个示例脚本怎么样?请认为这只是几个答案之一。

在这个答案中,图表的标题、副标题和替代标题用作搜索标签。

示例脚本:

在使用此脚本之前,请在 Google 高级服务中启用 Sheets API。并且当你测试这个脚本时,请设置搜索图表的变量并运行run()的函数。

function findByAnythingElse(spreadsheetId, searchObj) {
  var obj = Sheets.Spreadsheets.get(spreadsheetId, {fields: "sheets(charts(chartId,spec(altText,subtitle,title)))"});
  var chartIds = [];
  for (var i = 0; i < obj.sheets.length; i++) {
    var charts = obj.sheets[i].charts;
    if (charts) {
      for (var j = 0; j < charts.length; j++) {
        var title = charts[j].spec.title;
        var subTitle = charts[j].spec.subtitle;
        var altText = charts[j].spec.altText;
        if (title == searchObj.searchTitle || subTitle == searchObj.searchSubTitle || altText == searchObj.searchAltText) {
          chartIds.push(charts[j].chartId);
        }
      }
    }
  }
  return chartIds;
}

// Please run this fnuction for testing.
function run() {
  var searchObj = { // Please set search values.
    searchTitle: "sample1",
    searchSubTitle: "",
    searchAltText: "",
  }
  var spreadsheetId = "###"; // Please set Spreadsheet ID here.

  var res = findByAnythingElse(spreadsheetId, searchObj);
  Logger.log(res)
}
  • 在此示例脚本中,当运行run() 时,匹配searchObjsearchTitlesearchSubTitlesearchAltText 之一,检索图表ID。
    • 例如,图表 ID 也只能从 searchTitle 检索。
    • 当有多个图表具有相同的标题时,会返回多个图表 ID。

注意:

  • 这是一个简单的示例脚本。所以请根据您的情况进行修改。

参考资料:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多