【问题标题】:Google app scripts: How to set date format on horizontal axis chart on Spreadsheet?谷歌应用脚​​本:如何在电子表格的水平轴图表上设置日期格式?
【发布时间】:2025-12-03 09:35:01
【问题描述】:

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

我尝试使用方法“setOption('vAxis.format', 'dd/MM/YY')”,但它不起作用,显示诸如“dd/MM/YY 00:00”之类的刻度标签:00": Figure 1

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

电子表格:Link

谷歌脚本代码:

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 格式日期,然后尝试用文字字符串替换水平轴上的值,因为 line chart documentatión 在“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-script google-sheets


    【解决方案1】:

    这是一种解决方法。除了更改工作表中日期列的 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); 
    }
    

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

    注意它会改变日期列的格式

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

    【讨论】:

    • 库珀,谢谢您的回复。我已经尝试过您的建议,但 dd/MM/YY 之后的水平刻度标签上仍然显示“00:00:00”。 Look。还有什么建议吗?来自智利的问候!
    • 我今天要花更多的时间在这上面。我稍后会回来。
    • 谢谢 Cooper,我真的很感谢你的帮助。
    • Cooper,感谢您的宝贵时间。更改 A 列上的格式解决了 xlabel 问题,但图表看起来变形了Look。我正在尝试一种新策略,在列上使用 unixtime 格式日期,然后尝试用文字字符串替换水平轴上的值,因为 line chart documentatión 在“hAxis.ticks”选项上显示。我将编辑原始帖子以包含一些代码和我使用此选项遇到的新错误的详细信息。
    最近更新 更多