如何解决如何从SpreadsheetApp中的单元格文本值获取每个单词的属性粗体、斜体等
我需要 Google Apps Script 中电子表格单元格中出现的句子的每个单词的属性。
例如,在下图中,“神经网络”一词是粗体。我想获取句子中每个单词的属性,以确定哪个单词具有什么风格。
以下是我用来获取单元格值(文本)的代码。
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 中执行类似的段落吗?
解决方法
详细代码:
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"));
输入:
A | B | |
---|---|---|
1 | 神经元(节点) | 它是神经网络的基础单元。 |
2 | 连接 | 它将一层中的一个神经元连接到另一层中的另一个神经元 |
3 | 偏差(偏移) | 它是神经元的额外输入,int 一如既往 1 |
4 | 输入形状 | 它是我们传递给输入层的输入矩阵的形状。 |
输出:
[ basis,neural network ]
以同样的方式,您可以获得斜体 (isItalic()
) 等。但它们不是单词。它们是“运行”:
A run 是具有相同文本样式的最长不间断子字符串。例如,句子“This kid has two apples”。有五个单词和四个运行:[“这个”、“孩子”、“有两个”、“苹果”]。
我不知道你到底想获得什么。所以这取决于你如何使用这些运行,如果这些运行应该以某种方式与单词对齐,等等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。