google-apps-script - 谷歌应用脚本:如何在电子表格的水平轴图表上设置日期格式?
问题描述
我正在尝试从电子表格上的数据创建图表,但在管理新创建图表的水平轴上的格式时遇到了麻烦。
我尝试使用方法“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());
}
解决方案
这是一个解决方法。除了更改工作表中日期列的 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 的样子:
请注意,它会更改日期列的格式
这可能不是你想要的。对不起。
推荐阅读
- php - 用 php 用 mysqli 实例化构造函数类
- java - 如何从 Gradle 输出中删除无关的日志消息
- macos - 无法从 OSX 上的 docker 访问机器 localhost
- java - 如何修复“导入 org.junit.jupiter”?
- c - inotify_rm_watch 总是返回 EINVAL
- python-3.x - 从统计分布和属性生成数据
- entity-framework - 在抽象基类中生成的 EF Core GUID 数据库
- java - 将适配器变量减 1
- bash - 修改 sed 以便将唯一的文件部分分配给变量
- gmail-addons - Gmail 插件 - 未调用来自 newOpenLink 的回调