google-apps-script - 如何在谷歌表格图表中获得多行副标题?

标签 google-apps-script google-sheets google-visualization

我正在谷歌工作表中创建一个条形图,用宏记录它,并针对不同的数据情况运行代码。 当副标题太长时,图表上会缺少文本,以省略号 (...) 显示 增加图表的宽度会显示更多文本,但不是全部。 增加图表的高度没有任何作用! (它显示了一个长标题,但没有显示一个长副标题!)

添加换行符不起作用。使用一个时,我只能看到字幕的第一行,而其他行完全隐藏......

如何才能让字幕显示出我想要显示的所有文本? 鉴于标题在水平轴和垂直轴上都有响应,字幕不响应确实很奇怪。

谢谢

---- 编辑 ----

该脚本有助于自动化操作,但我不认为它添加了新功能。话虽这么说,我使用的代码如下:

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 表的屏幕截图,但这是我在 stackoverflow 上发表的第一篇文章,显然我需要至少 10 个声誉才能发布图像。 如果您认为分享此屏幕截图会有所帮助并且有一种巧妙的方法,请告诉我。 再次感谢

最佳答案

在当前状态下,无法向 Google 表格图表的副标题添加多行。因此,我建议您转到帮助 > 改进帮助表并添加此请求。或者,您可以使用此 template请求 Apps 脚本的此功能,例如允许 EmbeddedCharts标题写有 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())
)
  • 优点:您有一个“响应式”字幕。

  • 缺点:正如你所说在长文本中......文本变得太小而无法阅读

  • 使用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-apps-script - 如何在谷歌表格图表中获得多行副标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72027780/

    相关文章:

    google-apps-script - DriveApp 访问被拒绝

    google-apps-script - 填写单元格时的自动时间戳

    javascript - 尝试按索引访问 Map 的数组值时出现未定义错误

    javascript - 谷歌图表字体大小不起作用

    javascript - 有没有办法在多个 Google 表格文件中编辑同一单元格?

    arrays - 如何对对象数组进行排序 - google-apps-script

    google-apps-script - "MMMM yy"- 谷歌电子表格中的日期

    google-apps-script - 如何优化代码以将一个工作表范围复制到另一个工作表范围

    javascript - 如何在 Google TimeLine 图表中仅在一行中设置一个条形图(带有分组行标签)?

    php - JSON 到 Google 图表