如何在 google sheet 图表中获得 multiple-line 副标题?
How do I get a multiple-line subtitle in google sheet charts?
我正在 google sheet 中创建条形图,用宏记录它,运行 不同数据案例的代码。
当副标题太长时,图表上会缺少文本,以省略号 (...) 显示
增加图表的宽度会显示更多但不是全部的文本。
增加图表的高度没有任何作用! (它显示了一个长标题,但不是一个长副标题!)
添加换行符不起作用。使用一个时,我只能看到字幕的第一行,而其他的则完全隐藏...
如何让字幕显示我想要显示的所有文本?
鉴于标题在水平和垂直轴上都是响应式的,字幕不响应真的很奇怪。
谢谢
----编辑----
该脚本有助于实现自动化,但我不认为它增加了新功能。也就是说,我使用的代码如下:
function Macro3() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var chart = sheet.newChart()
.asBarChart()
.addRange(spreadsheet.getActiveRange())
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setTransposeRowsAndColumns(false)
.setNumHeaders(4)
.setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
.setOption('bubble.stroke', '#000000')
.setOption('useFirstColumnAsDomain', true)
.setOption('isStacked', 'false')
.setOption('su', SpreadsheetApp.getActiveSheebtitlet().getRange("B2:B2").getValue())
.setOption('title', SpreadsheetApp.getActiveSheet().getRange("B1:B1").getValue())
.setOption('annotations.domain.textStyle.color', '#808080')
.setOption('textStyle.color', '#000000')
.setOption('legend.textStyle.color', '#1a1a1a')
.setOption('subtitleTextStyle.color', '#999999')
.setOption('titleTextStyle.color', '#757575')
.setOption('annotations.total.textStyle.color', '#808080')
.setXAxisTitle(SpreadsheetApp.getActiveSheet().getRange("B4:B4").getValue())
.setOption('hAxis.textStyle.color', '#000000')
.setYAxisTitle(SpreadsheetApp.getActiveSheet().getRange("A4:A4").getValue())
.setOption('vAxes.0.textStyle.color', '#000000')
.setPosition(2, 1, 30, 0)
.build();
sheet.insertChart(chart);
};
我想附上 Google sheet 使用此宏的屏幕截图,但这是我在 Whosebug 上的第一个 post 显然我需要至少 10 个声望才能post 图片。
如果您认为分享此屏幕截图会有所帮助并且有一种巧妙的方法,请告诉我。
再次感谢
在当前状态下,无法向 Google Sheets 图表的字幕添加多行。因此,我建议您转到 Help
> Help Sheets to Improve
并添加此请求。或者,您可以使用此 template to request this functionality for Apps Script, for example, allowing EmbeddedCharts
to have titles written with HTMLService
.
可能的解决方法:
- 根据字符串长度改变字体大小
正如我在评论中告诉您的那样,您可以衡量字幕的字数,并据此应用不同的字体大小。例如:
function calcFontSize(subtitle){
const lenS = subtitle.split(" ").length
if(lenS > 12) return 8
if(len <= 12) return 12
}
// Inside your macro
.setOption(
'subtitleTextStyle.fontSize',
calcFontSize(sheet.getRange('B2:B2').getValue())
)
优点:你有一个“响应式”字幕。
缺点:如你所说In long texts ... The text becomes too small to read
- 使用Charts Service创建图表
由于此服务允许您在标题中添加跳转行,因此您可以实现您想要的:
function createGoogleChart() {
// extracted from here https://developers.google.com/apps-script/reference/charts/charts
const data = Charts.newDataTable()
.addColumn(Charts.ColumnType.STRING, 'Month')
.addColumn(Charts.ColumnType.NUMBER, 'In Store')
.addColumn(Charts.ColumnType.NUMBER, 'Online')
.addRow(['January', 10, 1])
.addRow(['February', 12, 1])
.addRow(['March', 20, 2])
.addRow(['April', 25, 3])
.addRow(['May', 30, 4])
.build();
const chart = Charts.newAreaChart()
.setDataTable(data)
.setStacked()
.setRange(0, 40)
.setTitle("My title\nMy long long long long long \n long long long long \n subtitle")
.build();
SpreadsheetApp.getActiveSheet().insertImage(
chart.getAs('image/png'), 10, 10
)
}
优点 : 你可以实现你所需要的。
缺点:
- 您插入静止图像(不可编辑)
- 没有默认字幕选项
- 您必须从 Apps 脚本构建它,并使其适应您的宏
我正在 google sheet 中创建条形图,用宏记录它,运行 不同数据案例的代码。 当副标题太长时,图表上会缺少文本,以省略号 (...) 显示 增加图表的宽度会显示更多但不是全部的文本。 增加图表的高度没有任何作用! (它显示了一个长标题,但不是一个长副标题!)
添加换行符不起作用。使用一个时,我只能看到字幕的第一行,而其他的则完全隐藏...
如何让字幕显示我想要显示的所有文本? 鉴于标题在水平和垂直轴上都是响应式的,字幕不响应真的很奇怪。
谢谢
----编辑----
该脚本有助于实现自动化,但我不认为它增加了新功能。也就是说,我使用的代码如下:
function Macro3() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var chart = sheet.newChart()
.asBarChart()
.addRange(spreadsheet.getActiveRange())
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setTransposeRowsAndColumns(false)
.setNumHeaders(4)
.setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
.setOption('bubble.stroke', '#000000')
.setOption('useFirstColumnAsDomain', true)
.setOption('isStacked', 'false')
.setOption('su', SpreadsheetApp.getActiveSheebtitlet().getRange("B2:B2").getValue())
.setOption('title', SpreadsheetApp.getActiveSheet().getRange("B1:B1").getValue())
.setOption('annotations.domain.textStyle.color', '#808080')
.setOption('textStyle.color', '#000000')
.setOption('legend.textStyle.color', '#1a1a1a')
.setOption('subtitleTextStyle.color', '#999999')
.setOption('titleTextStyle.color', '#757575')
.setOption('annotations.total.textStyle.color', '#808080')
.setXAxisTitle(SpreadsheetApp.getActiveSheet().getRange("B4:B4").getValue())
.setOption('hAxis.textStyle.color', '#000000')
.setYAxisTitle(SpreadsheetApp.getActiveSheet().getRange("A4:A4").getValue())
.setOption('vAxes.0.textStyle.color', '#000000')
.setPosition(2, 1, 30, 0)
.build();
sheet.insertChart(chart);
};
我想附上 Google sheet 使用此宏的屏幕截图,但这是我在 Whosebug 上的第一个 post 显然我需要至少 10 个声望才能post 图片。 如果您认为分享此屏幕截图会有所帮助并且有一种巧妙的方法,请告诉我。 再次感谢
在当前状态下,无法向 Google Sheets 图表的字幕添加多行。因此,我建议您转到 Help
> Help Sheets to Improve
并添加此请求。或者,您可以使用此 template to request this functionality for Apps Script, for example, allowing EmbeddedCharts
to have titles written with HTMLService
.
可能的解决方法:
- 根据字符串长度改变字体大小
正如我在评论中告诉您的那样,您可以衡量字幕的字数,并据此应用不同的字体大小。例如:
function calcFontSize(subtitle){
const lenS = subtitle.split(" ").length
if(lenS > 12) return 8
if(len <= 12) return 12
}
// Inside your macro
.setOption(
'subtitleTextStyle.fontSize',
calcFontSize(sheet.getRange('B2:B2').getValue())
)
优点:你有一个“响应式”字幕。
缺点:如你所说
In long texts ... The text becomes too small to read
- 使用Charts Service创建图表
由于此服务允许您在标题中添加跳转行,因此您可以实现您想要的:
function createGoogleChart() {
// extracted from here https://developers.google.com/apps-script/reference/charts/charts
const data = Charts.newDataTable()
.addColumn(Charts.ColumnType.STRING, 'Month')
.addColumn(Charts.ColumnType.NUMBER, 'In Store')
.addColumn(Charts.ColumnType.NUMBER, 'Online')
.addRow(['January', 10, 1])
.addRow(['February', 12, 1])
.addRow(['March', 20, 2])
.addRow(['April', 25, 3])
.addRow(['May', 30, 4])
.build();
const chart = Charts.newAreaChart()
.setDataTable(data)
.setStacked()
.setRange(0, 40)
.setTitle("My title\nMy long long long long long \n long long long long \n subtitle")
.build();
SpreadsheetApp.getActiveSheet().insertImage(
chart.getAs('image/png'), 10, 10
)
}
优点 : 你可以实现你所需要的。
缺点:
- 您插入静止图像(不可编辑)
- 没有默认字幕选项
- 您必须从 Apps 脚本构建它,并使其适应您的宏