使用脚本格式化 googlesheet 单元格中的文本

des*_*931 0 google-sheets google-apps-script

我有一个在单元格中格式化文本的谷歌工作表。一些文本有颜色并且是粗体的。我使用谷歌脚本在单元格中添加新内容。当我运行脚本时,会添加新内容,但会删除旧内容的格式。

1)如何在执行我的脚本时保持旧内容的格式。2)我想让新内容加粗和着色。如何格式化添加到单元格的新内容?

这是执行脚本之前我的单元格的内容

这是我的脚本:

  function CreateIssue() {
  var spreadsheet = SpreadsheetApp.getActive();
  var cell = spreadsheet.getCurrentCell();
  var oldContent = cell.getValue();
  var newContent ='Group:\n\nDescription:\n\nExpected Results:\n\nActual Results:\n\nTest 
  Results:\n\nTest Data:';
  var space = " ";
  cell.setValue(newContent + space + oldContent);
Run Code Online (Sandbox Code Playgroud)

这是执行脚本后我的单元格的内容

如您所见,旧内容的格式已清除。

Tan*_*ike 5

  • 您想将文本添加到单元格中文本的顶部并将其放入单元格。
  • 在这种情况下,您希望保留原始文本的文本样式。
  • 您想将添加文本的文本样式更改为“粗体”和“前景颜色”。
  • 您想使用 Google Apps 脚本来实现这一点。

如果我的理解是正确的,这个答案怎么样?请将此视为几种可能的答案之一。

改装要点:

当使用值放置时 setValue,似乎清除了文本样式。这可能是规范。所以在这种情况下,为了设置文本样式,我使用了 Class TextStyleBuilder 和 Class RichTextValueBuilder。这个修改后的脚本的流程如下。

流动:
  1. 检索单元格范围。
  2. 创建附加文本的文本样式,它们是newContentspace
  3. 检索原始文本的文本样式,即oldContent.
  4. 创建新的 RichTextValueBuilder。
  5. 将新文本设置为 RichTextValueBuilder。
  6. 将文本样式设置为 RichTextValueBuilder。
  7. 将 RichTextValueBuilder 放入单元格。

修改后的脚本:

当你的脚本被修改时,它变成如下。请选择一个包含oldContent并运行脚本的单元格。这样,newContentspace被添加到oldContent,并设置文本样式。

function CreateIssue() {
  var spreadsheet = SpreadsheetApp.getActive();
  var cell = spreadsheet.getCurrentCell();
  var oldContent = cell.getValue();
  var newContent = 'Group:\n\nDescription:\n\nExpected Results:\n\nActual Results:\n\nTest Results:\n\nTest Data:';
  var space = " ";

  // I added below script.
  var newStyles = [{
    start: 0,
    end: newContent.length,
    style: SpreadsheetApp.newTextStyle().setBold(true).setForegroundColor("green").build()
  }];
  var richTextValue = cell.getRichTextValue();
  var offset = newContent.length + space.length;
  var oldContent = richTextValue.getText();
  if (oldContent.length > 0) {
    richTextValue.getRuns().forEach(function(e) {
      newStyles.push({
        start: offset + e.getStartIndex(),
        end: offset + e.getEndIndex(),
        style: e.getTextStyle()
      });
    });
  }
  var richText = SpreadsheetApp.newRichTextValue().setText(newContent + space + oldContent);
  newStyles.forEach(function(e) {richText.setTextStyle(e.start, e.end, e.style)});
  cell.setRichTextValue(richText.build());
}
Run Code Online (Sandbox Code Playgroud)
  • 在上面的脚本中,附加文本被放置为粗体和绿色。关于这个,当你想改变颜色时,请修改它。

结果:

var newContent = "foo";设置并选择一个包含“bar”的文本样式的单元格并运行上述脚本时,可以得到以下结果。

前:

在此处输入图片说明

后:

在此处输入图片说明

保留原始文本样式,附加文本具有文本样式。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。