0

早些时候有人向我指出如何使用 pieHole 更改 3D 饼图中的标题或副标题,并将标题保留为浮动文本框。

这样做的一个令人不快的副作用是删除了切片标签,即来自这个 在标题更改之前

对此

标题更改后

我为此使用的代码是

function UpdateSubTitleAdvanced(sheetName, chartId, newTitle) {
  const active = SpreadsheetApp.getActiveSpreadsheet();
  const ssId = active.getId();
  const sheets = Sheets.Spreadsheets.get(ssId).sheets;
  for (let s in sheets) {
    let sheet = sheets[s];
    if (sheet.properties.title === sheetName) {
      for (let c in sheet.charts) {
        let chart = sheet.charts[c];
        if (chart.chartId === chartId) {
          Logger.log("Sheet %s, Chart %s, Title '%s', SubTitle '%s'", sheet.properties.title, String(chart.chartId), chart.spec.title, chart.spec.subtitle); 
          delete chart.position;
          chart.spec.subtitle = newTitle;
          Sheets.Spreadsheets.batchUpdate({requests:[{updateChartSpec: chart}]}, ssId);
        }
      }
    }
  }
}

function _UpdateSubTitle() {
  UpdateSubTitleAdvanced("Group0",713335354,"### new sub title");
}

代码中似乎没有任何内容可以显式调整切片标签。文档中也没有关于如何将它们放回去的任何内容。

我在捕获浏览器会话的 HAR 和提取描述图形的 JSON 结构方面取得了一些成功。

{
    "chartType": "PieChart",
    "options": {
        "pieSliceTextStyle": {
            "fontSize": 10
        },
        "legend": "none",
        "annotations": {
            "total": {
                "textStyle": {}
            },
            "domain": {
                "textStyle": {}
            }
        },
        "is3D": true,
        "title": "### new sub title",
        "titleTextStyle": {
            "fontName": "serif",
            "alignment": "center"
        },
        "pieSliceText": "label",
        "fontName": "serif",
        "legendTextStyle": {},
        "pieHole": 0.5,
        "bubble": {
            "textStyle": {}
        },
        "useFirstColumnAsDomain": true,
        "subtitleTextStyle": {
            "fontName": "sans-serif",
            "color": "#000000",
            "fontSize": 16,
            "bold": true,
            "alignment": "center"
        },
        "subtitle": "influencer marketing",
        "width": 600,
        "textStyle": {
            "fontName": "serif"
        },
        "chartArea": {
            "top": "1.8585131894484377%",
            "left": "1.4962121212121169%",
            "width": "98.50378787878789%",
            "height": "96.88249400479617%"
        },
        "height": 371
    },
    "initialView": {}
}

我还没有尝试以编程方式更改它们中的任何一个。

在这里可以做什么?我想实现以下目标:

  • 保持标题或副标题框可移动。
  • 保持切片命名。
  • 找到一种方法使标题或副标题在图像中居中。
  • 在图表框架内保持图像最大化(图像似乎表明上述代码会影响图像大小。)
4

1 回答 1

1

这个答案怎么样?

目前的问题:

出现此问题的原因是在现阶段,Sheets API 中的“spreadsheets.get”方法检索到的对象中不包含“切片标签”的属性。这可以在图表的以下对象中看到。此对象通过 Sheets API 中的“spreadsheets.get”方法检索。

{
  "chartId": ###,
  "spec": {
    "title": "sample title",
    "pieChart": {
      "legendPosition": "LABELED_LEGEND",
      "domain": {
        "sourceRange": {
          "sources": [
            {
              "sheetId": ###,
              "startRowIndex": 0,
              "endRowIndex": 5,
              "startColumnIndex": 0,
              "endColumnIndex": 1
            }
          ]
        }
      },
      "series": {
        "sourceRange": {
          "sources": [
            {
              "sheetId": ###,
              "startRowIndex": 0,
              "endRowIndex": 5,
              "startColumnIndex": 1,
              "endColumnIndex": 2
            }
          ]
        }
      },
      "threeDimensional": true,
      "pieHole": 0.5
    },
    "hiddenDimensionStrategy": "SKIP_HIDDEN_ROWS_AND_COLUMNS",
    "titleTextFormat": {
      "fontFamily": "Roboto"
    },
    "fontName": "Roboto"
  },
  "position": {
    "overlayPosition": {
      "anchorCell": {
        "sheetId": ###,
        "rowIndex": 1,
        "columnIndex": 1
      },
      "offsetXPixels": 69,
      "offsetYPixels": 17,
      "widthPixels": 600,
      "heightPixels": 371
    }
  }
}

从上面的图表对象中,发现“切片标签”的属性不包括在内。这样,当使用从图表中检索到的值更新图表时,将删除“切片标签”。而且,“UpdateChartSpecRequest”还没有设置“切片标签”的属性。这样,解决方法还不能使用。

而且,关于你的最后4个请求,在当前阶段,这些都不包含在“spreadsheets.get”和“UpdateChartSpecRequest”方法的图表对象中。

不幸的是,这些是 Google 方面的当前规范。Sheets API 现在正在增长。所以我相信这些属性会在以后的更新中加入。

未来:

我认为出现此类问题的原因是由于“updateChartSpec”未使用fields属性进行更新。例如,当fields可以使用属性时,只能更新图表标题。这样,即使当前的“UpdateChartSpecRequest”中不包含“Slice label”的属性,也只能更新图表标题。在这种情况下,您当前的问题将不会发生。因此,我已经在 2020 年 5 月 28 日将其报告为问题跟踪器的未来请求。参考并且这已经被接受。所以我认为谷歌可能会在不久的将来修改这个。

参考:

于 2020-05-29T23:31:01.930 回答