Определите конкретные диаграммы на листах Google, используя скрипт Google - PullRequest
1 голос
/ 10 июля 2019

У меня есть презентация Google Slides, содержащая диаграмму, привязанную к листу электронных таблиц Google.Я создал плагин (скрипт Google), с помощью которого я могу вставлять URL-адреса листов и иметь все доступные диаграммы по идентификатору.

Я не могу решить проблему идентификации нужной мне диаграммы.его идентификатор, который генерируется.

Прямо сейчас я могу сделать это:

  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')

Вариант использования - иметь шаблон электронной таблицы, содержащий данные клиента и несколько диаграмм, визуализирующих эти данные.Всякий раз, когда кто-то хочет сделать презентацию, он может щелкнуть меню плагинов и получить определенные слайды, которые будут заполнены конкретными диаграммами, которые будут обрезаны и изменены до предопределенного формата.

1 Ответ

2 голосов
/ 11 июля 2019
  • Вы хотите извлечь chartId из всех диаграмм в электронной таблице.
  • Вы хотите выполнить поиск chartId по определенному тегу.
  • Вы хотите добиться этого с помощью Google AppsСценарий.

Если мое понимание верно, как насчет этого примера сценария?Пожалуйста, подумайте об этом как об одном из нескольких ответов.

В этом ответе заголовок диаграммы, подзаголовок и заголовок alt используются в качестве поисковых тегов.

Пример сценария:

Перед использованием этого сценария, пожалуйста, включите Sheets API в Advanced Google Services.И когда вы тестируете этот скрипт, пожалуйста, установите переменные для поиска на графике и запустите функцию 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(), один изsearchTitle, searchSubTitle и searchAltText из searchObj совпадают, идентификатор диаграммы получен.
    • Например, идентификатор диаграммы можно также получить только из searchTitle.
    • Если существует несколько диаграмм с одинаковым названием, возвращается несколько идентификаторов диаграммы.

Примечание:

  • Это простой пример сценария.Поэтому, пожалуйста, измените его для вашей ситуации.

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...