首页 > 解决方案 > 谷歌应用脚​​本:如何在电子表格的水平轴图表上设置日期格式?

问题描述

我正在尝试从电子表格上的数据创建图表,但在管理新创建图表的水平轴上的格式时遇到了麻烦。

我尝试使用方法“setOption('vAxis.format','dd/MM/YY')”但它不起作用,显示像“dd/MM/YY 00:00:00”这样的刻度标签:图 1

如果我更改电子表格上的日期格式,以便在第二张图表上得到变形值:图 2

电子表格:链接

谷歌脚本代码:

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());  
}

请记住,前面的代码只是原始实现的简化视图。在原始项目中,我们在电子邮件中导出第二个图表,但我们看到的问题是相同的。谢谢!

--

2019 年 9 月 27 日更新:

我正在尝试一种新策略,在列上使用 unixtime 格式日期,然后尝试用文字字符串替换水平轴上的值,因为折线图文档在“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());  
}

标签: google-apps-scriptgoogle-sheets

解决方案


这是一个解决方法。除了更改工作表中日期列的 numberFormat 之外,我找不到任何其他方法。

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); 
}

类嵌入图表

这是我过去几个小时用来进行测试的脚本:

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 的样子:

在此处输入图像描述

请注意,它会更改日期列的格式

这可能不是你想要的。对不起。


推荐阅读