【发布时间】:2021-06-23 19:34:15
【问题描述】:
我想将部分字符串(通过正则表达式)转换为特定的文本样式,但我无法管理循环并且总是出错。请你帮助我好吗 ?非常感谢。
第一行是原始文本(用逗号分隔的字符串),第二行是所需的文本样式。
这是表格(法语参数)https://docs.google.com/spreadsheets/d/1vq0Ai_wEr3MamEQ-kMsXW7ZGg3RxrrkE5lITcYjO-rU/edit?usp=sharing
function NomsStyleBotanique(){
const classeur = SpreadsheetApp.getActive(); // var Feuille = classeur.getSheetByName('Feuille 1');
var ligne = classeur.getCurrentCell().getRow();
var colonne = classeur.getCurrentCell().getColumn();
var range = classeur.getActiveRange();
var richTextValues = range.getRichTextValues().map(([a]) => {
var text = a.getText();
var pos = 0;
var myregEx = /,/g;
var Noms = text.split(myregEx);
var textStyleNomPlante = SpreadsheetApp.newTextStyle()
.setFontSize(10)
.setForegroundColor("black")
.setFontFamily("Times New Roman")
.setItalic(false)
.build();
var textStyleNomAuteur = SpreadsheetApp.newTextStyle()
.setFontSize(10)
.setForegroundColor("#616399") // ("grey")
.setFontFamily("Times New Roman")
.setItalic(true)
.build();
var nbPhrases = [];
var i =0;
while (Noms){ i++; nbPhrases.push(Noms[i]); // SpreadsheetApp.getUi().alert(Noms[i]);
for (var i=0;i<nbPhrases.length;i++){
var myarr = Noms[i].split(" ");
var Espace1 = myarr[0].length+1;
var Espace2 = myarr[1].length+1;
if (Noms[i]){
if ((Noms[i].indexOf("subsp") > 1) || (Noms[i].indexOf("var.") > 1)){
var Espace3 = myarr[2].length+1;
var Espace4 = myarr[3].length+1;
pos = Espace1+Espace2+Espace3+Espace4; }
else { pos = Espace1+Espace2; } // pos = text.match(new RegExp(/\\s/, 'g'))[2];
var position = pos;
if (position > -1){
var temp = a.getTextStyle(0, position - 1);
return [
SpreadsheetApp.newRichTextValue()
.setText(Noms[i])
.setTextStyle(0, position - 1, textStyleNomPlante)
.setTextStyle(position, Noms[i].length, textStyleNomAuteur)
.build()
];
}
return [SpreadsheetApp.newRichTextValue().setText(Noms[i]).setTextStyle(Noms[i].getTextStyle()).build()];
}
}
}
} // fin boucle
);
range.setRichTextValues(richTextValues);
}
【问题讨论】:
-
很遗憾,我无法理解您的示例图片。我为此道歉。可以问一下具体情况吗?
-
感谢您回复并添加更多信息。我有个问题。当我看到
Desired style的值时,我无法理解(Griseb.) Briq不是红色字体颜色的逻辑。我为此道歉。我能问你实现目标的逻辑细节吗? -
感谢您的回复。不幸的是,我仍然无法理解实现目标的逻辑。我为我的理解不佳道歉。我能问你实现目标的逻辑细节吗?
-
嗨@Nad,这里的问题是您的作者姓名有时用逗号分隔,有时作者姓名没有用逗号分隔。参见
Ten., Benth., Swart,与(Ten.) Kerguélen。您的代码没有考虑到这一点。我不知道是否有一种方法可以创建一种模式来识别植物名称之间的中断与作者姓名之间的中断。我需要查看更多数据以确定我们是否可以使用其他模式。 -
感谢您的回复。现在我注意到你的问题已经解决了。我很高兴。
标签: google-sheets script textstyle