本文介绍了如何获取属性(粗体、斜体等)SpreadsheetApp中单元格文本值中的每个单词的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要Google Apps脚本中电子表格单元格中出现的句子的每个单词的属性。

例如,在下图中,&神经网络一词以粗体显示。我想要获取句子中每个单词的属性,以确定哪个单词具有什么风格。

以下是我用来获取单元格值(文本)的代码。

function getSheetsSelection(e) {
  var text = '';
  var ranges = SpreadsheetApp.getActive().getSelection().getActiveRangeList().getRanges();
  for (var i = 0; i < ranges.length; i++) {
    const range = ranges[i];
    const numRows = range.getNumRows();
    const numCols = range.getNumColumns();
    for (let i = 1; i <= numCols; i++) {
      for (let j = 1; j <= numRows; j++) {
        const cell = range.getCell(j, i);
        if (cell.getValue()) {
          var cellTextStyle = cell.getValues()
        }
      }
    }
  }
}

注意:在此代码中,在cell变量中,我们得到了一个名为getTextStyle()的方法,但它返回的是整个单元格的样式,而不是单个单词。而在DocumentApp中,我们得到文本,例如作为段落或文本,我们可以遍历所有单词并获得它们的属性。我们可以在SpreadsheetApp中执行类似于该段落的内容吗?

推荐答案

Class RichTextValue

Class TextStyle

详细代码:

var sheet     = SpreadsheetApp.getActiveSheet();
var range     = sheet.getRange("B1");
var rich_text = range.getRichTextValue();
var runs      = rich_text.getRuns();

var words_bold = [];

for (var r of runs) {
  var style = r.getTextStyle();
  if (style.isBold()) words_bold.push(r.getText());
}

Logger.log(words_bold);

一行函数:

const bold_words_from = (cell) => 
  SpreadsheetApp.getActiveSheet().getRange(cell).getRichTextValue().getRuns()
  .filter(r=>r.getTextStyle().isBold()).map(r=>r.getText());

Logger.log(bold_words_from("B1"));

输入:

1神经元(节点)它是神经网络的基本单元。
2连接它将一层中的一个神经元连接到另一层中的另一个神经元
3偏差(偏移量)它是神经元的额外输入,INT一如既往1
4输入形状它是我们传递给输入层的输入矩阵的形状。

输出:

[ basis , neural network ]

以同样的方式,您可以获得斜体(isItalic())等。但它们不是单词。它们是"运行":

我不知道你到底想要什么。因此,如果这些运行应该以某种方式与单词对齐,那么您将如何使用这些运行取决于您。

这篇关于如何获取属性(粗体、斜体等)SpreadsheetApp中单元格文本值中的每个单词的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 12:13