首页 > 解决方案 > 是否可以通过 Google Sheets API 设置图表选项?

问题描述

我能够更新“堆积面积图”,但是我无法弄清楚如何在水平轴上设置“将标签视为文本”。(这在 UI 中通过单击“编辑图表 -> 自定义 -> 水平轴 -> 将标签视为文本”来完成)

有谁知道用 Sheets API 做到这一点的方法?还有其他方法吗?

谢谢!!

标签: google-apps-scriptgoogle-sheetschartsgoogle-visualizationgoogle-sheets-api

解决方案


  • 您想Treat labels as text在 Google 电子表格中设置图表。
  • 您想使用 Sheets API 来实现这一点。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

Treat labels as text不幸的是,我在请求正文中找不到要设置的属性。我准备了 2 种模式的 checkedTreat labels as text和 unchecked Treat labels as text,当这两种模式与使用电子表格.get 方法检索到的图表对象进行比较时,我发现两者没有区别。至此,我认为在当前阶段,Treat labels as textSheets API 中没有设置方法。

因此,作为几种解决方法之一,在这里,我想建议将 Web 应用程序用作 API。使用 Google Apps 脚本时,Treat labels as text可以设置。此解决方法使用此方法。

用法:

此变通方法的用法如下。

1. 新建 Google Apps Script 项目。

Web Apps 的示例脚本是 Google Apps 脚本。所以请创建一个 Google Apps Script 项目。

如果要直接创建,请访问https://script.new/。在这种情况下,如果您没有登录 Google,则会打开登录屏幕。所以请登录谷歌。至此,Google Apps Script 的脚本编辑器被打开。

2. 复制粘贴脚本。

请复制并粘贴以下脚本。

function doGet(e) {
  var spreadsheetId = e.parameter.spreadsheetId;
  var chartId = e.parameter.chartId;
  var treatLabelsAsText = e.parameter.treatLabelsAsText;
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var sheets = ss.getSheets();
  var done = false;
  for (var i = 0; i < sheets.length; i++) {
    var charts = sheets[i].getCharts();
    if (charts.length > 0) {
      for (var j = 0; j < charts.length; j++) {
        if (charts[j].getChartId() == chartId) {
          var modifiedChart = charts[j].modify().setOption('treatLabelsAsText', treatLabelsAsText).build();
          sheets[i].updateChart(modifiedChart);
          done = true;
          break;
        }
      }
      if (done) break;
    }
  }
  return ContentService.createTextOutput("Done.");
}

3. 部署 Web 应用程序。

  1. 在脚本编辑器上,通过“发布”->“部署为 Web 应用程序”打开一个对话框。
  2. “将应用程序执行为:”选择“我” 。
  3. “谁有权访问应用程序:”选择“任何人,甚至匿名” 。
    • 此设置用于测试此解决方法。
    • 当“仅限我自己”设置为“谁有权访问应用程序:”时,需要使用访问令牌。
  4. 单击“部署”按钮作为新的“项目版本”。
  5. 自动打开“需要授权”对话框。
    1. 单击“查看权限”。
    2. 选择自己的帐户。
    3. 在“此应用未验证”中单击“高级”。
    4. 点击“转到###项目名称###(不安全)”
    5. 单击“允许”按钮。
  6. 单击“确定”。
  7. 复制 Web 应用程序的 URL。就像https://script.google.com/macros/s/###/exec
    • 当您修改 Google Apps 脚本时,请重新部署为新版本。这样,修改后的脚本就会反映到 Web 应用程序中。请注意这一点。

4. 样品卷曲。

为了测试对 Web 应用程序的访问,请使用以下 curl 命令。

curl -GL \
  -d "spreadsheetId=###" \
  -d "chartId=###" \
  -d "treatLabelsAsText=true" \
  "https://script.google.com/macros/s/###/exec"

如果您将 Web 应用程序部署为“谁有权访问应用程序:”的“仅我自己”,请按如下方式使用您的访问令牌。

curl -GL \
  -H "Authorization: Bearer ###" \
  -d "spreadsheetId=###" \
  -d "chartId=###" \
  -d "treatLabelsAsText=true" \
  "https://script.google.com/macros/s/###/exec"
  • 请设置上面检索到的 Web Apps 的 URL 以及电子表格 ID、图表 ID 和 的值treatLabelsAsText
  • 运行上述 curl 命令时,会检查电子表格中特定图表的“将标签视为文本”。你可以Done.在控制台看到。

笔记:

  • 当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 当您想使用访问令牌时,请包括访问令牌的范围https://www.googleapis.com/auth/drive.readonly和/或https://www.googleapis.com/auth/drive访问令牌。

参考:

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


推荐阅读