Скрипты приложения Google: как установить формат даты на горизонтальной оси в электронной таблице? - PullRequest
1 голос
/ 25 сентября 2019

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

Я пытался использовать метод "setOption ('vAxis.format ',' dd / MM / YY ') ", но это не работает, показывая метки тиков, такие как" dd / MM / YY 00:00:00 ": Рисунок 1

Если я изменю формат даты в электронной таблице, то получу деформированные значения на втором графике: Рисунок 2

Электронная таблица: Ссылка

Код скрипта Google:

function Test_format_chart() {
var ss=SpreadsheetApp.openById("1lVqL5nT1IS3T2LPrcB5QAg_03ni0JgoJgxbAWdWb0I")
var sh=ss.getSheetByName("TestSheet");
var chts=sh.getCharts();

 for(var i=0;i<chts.length;i++) {
   sh.removeChart(chts[i]);
 }
var chartBuilder = sh.newChart();
chartBuilder.addRange(sh.getRange("A1:B25"))
.setChartType(Charts.ChartType.LINE)
.setOption('useFirstColumnAsDomain', true) 
.setPosition(2, 4, 0, 0)
.setOption('title', 'My Line Chart!')
.setOption('hAxis.textStyle',{color:'#ff0000'})
.setOption('hAxis.format', 'dd/MM/YY')
sh.insertChart(chartBuilder.build());  
}

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

-

27/09/2019. Актуализация:

Я пробую новую стратегию, используя дату в формате unixtime в столбце, а затем попробуйте заменитьзначение по горизонтальной оси с литеральной строкой в ​​виде линейной диаграммы document отображается в опции 'hAxis.ticks'.Но я не получаю ожидаемых результатов, метки горизонтальных тиков не меняются с вариациями setOption ('hAxis.ticks', ....), которые я отслеживаю.

Какой-то код:

function Test_format_chart() {
var ss=SpreadsheetApp.openById("1lVqL5nT1IS3T2LPrcB5QAg_03ni0JgoJgxbAWdWb0I")     
var sh=ss.getSheetByName("TestSheet");
var chts=sh.getCharts();

 for(var i=0;i<chts.length;i++) {
   sh.removeChart(chts[i]);
 }

 var chartBuilder = sh.newChart();
 chartBuilder.addRange(sh.getRange("A1:B25"))
  .setChartType(Charts.ChartType.LINE)
  .setOption('useFirstColumnAsDomain', true) 
  .setPosition(2, 4, 0, 0)
  .setOption('title', 'My Line Chart!')
  .setOption('hAxis.textStyle',{color:'#ff0000'})
  .setOption('hAxis.ticks', [1568023200, 156802324900])// <--

  sh.insertChart(chartBuilder.build());  
}

1 Ответ

1 голос
/ 26 сентября 2019

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

function Test_format_chart() {
  var ss=SpreadsheetApp.openById("1lVqL5nT1IS3T2LPrcB5QAg_03ni0JgoJgxbAWdWb0I")
  var sh=ss.getSheetByName("TestSheet");
  var rg=sh.getRange(2,1,sh.getLastRow()-1,1).setNumberFormat("dd/mm/yy");//Modify the format for column one date data.
  var chart=sh.getCharts()[0].modify()
  .setPosition(5,10,0,0)
  .setOption('title', 'Formated new chart')
  .build();
  sh.updateChart(chart); 
}

Класс Embedded Chart

Этоэто сценарий, который я использовал для моего тестирования в последние пару часов:

function createChart() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg= sh.getRange(1,1,sh.getLastRow()-1,sh.getLastColumn());
  var drg=sh.getRange(2,1,sh.getLastRow()-1,1).setNumberFormat("dd/mm/yy");
  var chts=sh.getCharts();
  for(var i=0;i<chts.length;i++) {
    sh.removeChart(chts[i]);
  }
  var chartBuilder = sh.newChart();
  chartBuilder.addRange(rg)
  .setChartType(Charts.ChartType.LINE)
  .setPosition(2, 4, 0, 0)
  .setOption('title', 'My Line Chart!')
  .setOption('hAxis.textStyle',{color:'#ff0000'});
  sh.insertChart(chartBuilder.build());
}

Вот как выглядит мой Sheet1:

enter image description here

Обратите внимание, что это изменяет форматирование столбца даты

Это, вероятно, не то, что вы хотели.К сожалению.

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