Почему при изменении заголовка / подзаголовка в Google Таблицах отключаются метки фрагментов? - PullRequest
0 голосов
/ 29 мая 2020

Раньше мне указали , как изменить заголовок или подзаголовок в трехмерной диаграмме p ie с круговым отверстием и сохранить заголовок в виде плавающего текстового поля.

Одним из неприятных побочных эффектов при этом было удаление этикеток срезов, то есть от этого Before titles change

до

After titles change

Код, который я использую для этого, -

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, описывающую график c.

{
    "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": {}
}

Я еще не пробовал менять ни один из них программно.

Что здесь можно сделать? Я хочу добиться следующего:

  • Оставить поле заголовка или подзаголовка подвижным.
  • Сохранить названия фрагментов.
  • Найти способ иметь заголовок или подзаголовок по центру изображения.
  • Держите изображение максимально развернутым в пределах рамки диаграммы (изображения, казалось бы, указывают на то, что приведенный выше код влияет на размер изображения.)

1 Ответ

1 голос
/ 30 мая 2020

Как насчет этого ответа?

Текущая проблема:

Причина этой проблемы в том, что на текущем этапе свойство «Метка фрагмента» не включено в объект, полученный метод spreadsheets.get в API Таблиц. Это можно увидеть на следующем объекте диаграммы. Этот объект извлекается методом «spreadsheets.get» в API таблиц.

{
  "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» еще не имеет свойства для установки «Slice label». Таким образом, обходной путь еще не может быть использован.

А также, что касается последних ваших 4 запросов на текущем этапе, они не включены в объект диаграммы как метода «spreadsheets.get», так и "UpdateChartSpecRequest".

К сожалению, это текущая спецификация на стороне Google. API Таблиц сейчас растет. Поэтому я считаю, что эти свойства будут добавлены в будущем обновлении.

Будущее:

Я думал, что причина такой проблемы связана с тем, что "updateChartSpe c" не был обновлен с помощью fields свойство. Когда, например, можно использовать свойство fields, можно обновлять только заголовок диаграммы. Таким образом, даже если свойство «Метка среза» не включено в текущий запрос «UpdateChartSpecRequest», можно обновлять только заголовок диаграммы. В этом случае ваша текущая проблема не возникнет. Итак, я уже сообщил об этом как о будущем запросе в системе отслеживания проблем 28 мая 2020 г. Ref И это уже было принято. Поэтому я думаю, что Google может изменить это в ближайшем будущем.

Ссылка:

...