如何在 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.

可能的解决方法:

  1. 根据字符串长度改变字体大小

正如我在评论中告诉您的那样,您可以衡量字幕的字数,并据此应用不同的字体大小。例如:

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

  1. 使用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 脚本构建它,并使其适应您的宏