.newRichTextValue()当前不起作用

时间:2019-08-29 12:47:48

标签: google-apps-script google-sheets

我有一个Google表单,其中列出了人们所做的采访。我想要一个特定的表格,用于通过其ID来拉某人并弹出他们的所有访谈。人们可以进行多次采访,因此我建立了一个功能,可以查看每个条目并返回与他们的ID相对应的所有采访。现在它可以工作,但是很难阅读。我只想将问题加粗。

我尝试了几种不同的方法。我偶然发现了两年前问过的类似问题,但是从那时起,谷歌就提出了一种使用称为newRichTextValue()的谷歌脚本仅对某些文本范围加粗的方法。但是我不能使它工作。它显示以下消息:com.google.apps.maestro.server.beans.trix.impl.RichTextValueApiAdapter@57995aa而不是我想要的。我仔细研究了一下,如果您尝试在Gmail中使用RichTextValue,则可能会发生这种情况,因为它需要HTML。

function interview(alpha) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var interview = ss.getSheetByName("2020 Interview");
  var data = interview.getDataRange().getValues();
  var intvw = "";
  var bold = SpreadsheetApp.newTextStyle().setBold(true).build();
  var space = "\n\n";
  var difspace = "\n";
  var newtext;
  var month = ["JAN", "FEB", "MAR", "APR", "MAY", 'JUN', "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
  for (var i = 1; i < data.length; i++) {
    if (data[i][0] == alpha){
      intvw = intvw + data[i][4] + " | " + data[i][1].getDate() + " " + month[data[i][1].getMonth()] + " " + data[i][1].getYear();
      intvw = intvw + space;
      newtext = data[0][5];
      newtext = SpreadsheetApp.newRichTextValue()
                              .setText(newtext)
                              .setTextStyle(bold)
                              .build();
      intvw = intvw + newtext + difspace;
      intvw = intvw + data[i][5] + space;
  }
  }
  return intvw;
}

当前输出为:

名称| 2019年5月1日

com.google.apps.maestro.server.beans.trix.impl.RichTextValueApiAdapter@579955aa

他们对问题的回答

应该是:

名称| 2019年5月1日

问题

他们对问题的回答

1 个答案:

答案 0 :(得分:1)

newRichTextValue().build();不太适合您使用的方式

它不会返回可附加到其他字符串(intvw = intvw + newtext + difspace;...)的字符串,而是返回RichTextValue类的实例,该实例只能用作已确定方法的参数。例如。您可以使用它来将格式化的文本分配给一个范围。

如果您的目标是将F列的某些单元格输入一个单元格,而单元格“ F1”应为粗体,其余单元格未格式化,则可以通过首先分配合并内容来实现data[0][5]intvw到一个单元格中,然后将newRichTextValue().build();应用于intvw

在此,方法setTextStyle(startOffset, endOffset, textStyle)仅允许您将文本样式应用于data[0][5]-只要知道此子字符串在整个字符串中的位置。

如果data[0][5]是字符串的开头,则可以仅通过data[0][5].length获得endOffset。

这是您的代码的修改版本,可以正常工作:

function interview(alpha) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var interview = ss.getSheetByName("2020 Interview");
  var data = interview.getDataRange().getValues();
  var intvw = "";
  var bold = SpreadsheetApp.newTextStyle().setBold(true).build();
  var space = "\n\n";
  var difspace = "\n";
  var newtext = data[0][5]; 
  var endIndex=newtext.length;
  var month = ["JAN", "FEB", "MAR", "APR", "MAY", 'JUN', "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
  intvw = intvw + newtext + difspace;
  for (var i = 1; i < data.length; i++) {
    if (data[i][0] == alpha){
      intvw = intvw + data[i][4] + " | " + data[i][1].getDate() + " " + month[data[i][1].getMonth()] + " " + data[i][1].getYear();
      intvw = intvw + space;
      intvw = intvw + data[i][5] + space;
   }
  }
 var newRichText = SpreadsheetApp.newRichTextValue()
                              .setText(intvw)
                              .setTextStyle(0,endIndex,bold)
                              .build();
  //replace "A10" through the cell of your choice
  interview.getRange("A10").setRichTextValue(newRichText); 
}

如果您希望将data[0][5]插入与字符串开头不同的位置,或者希望在单元格中插入几个粗体文本范围,则必须找到相应的startOffsetendOffset和Regex表达式。