jlo*_*jlo 1 google-sheets richtext google-apps-script
我在电子表格中有一列值,我想为其创建超链接(有时,每个单元格有 2 个超链接)。我设法使用以下代码成功地做到了这一点:
function makeJiraLinks() {
let ss = SpreadsheetApp.getActive();
let sheet = ss.getSheetByName('testing');
let data = sheet.getDataRange().getValues();
// Get 1-indexed column
let col = 1 + data[0].indexOf('Jira ids');
if (col == 0) {
return;
}
for (let row = 1; row <= sheet.getMaxRows(); ++row) {
let range = sheet.getRange(row, col);
let text = '' + range.getValue();
if (text.indexOf("TTSD-") === -1) {
continue;
}
let builder = SpreadsheetApp.newRichTextValue();
builder.setText(text);
let re = /TTSD-\d+/g;
let result;
while (result = re.exec(text)) {
let startIndex = result.index;
let endIndex = startIndex + result[0].length;
builder.setLinkUrl(startIndex, endIndex, 'https://jira.tools/browse/' + result[0]);
}
range.setRichTextValue(builder.build());
}
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这段代码的地方是它效率低下,因为它逐一推进范围并运行 getValue() 次数与列中的行一样多。
我想要什么:有什么方法可以将整个列作为数组获取并直接对其应用富文本,这样我只需调用 getValues() 一次和 setValues() 一次?
谢谢!
我相信你的目标如下。
Jira ids您想要检索第一行具有标题的列。TTSD-\d+您想要为检索到的行中的文本提供超链接。getRichTextValues()和setRichTextValues(values)。当使用这些方法时,我认为工艺成本将会降低。getText()。这样,也可以检索单元格值。因此,在这种情况下,不需要使用getValues和。setValuescopy()。这样,原来的文本样式就不会改变,并且可以添加超链接。当以上几点反映到您的脚本中时,它会变成如下所示。
function makeJiraLinks() {
let ss = SpreadsheetApp.getActive();
let sheet = ss.getSheetByName('testing');
let [header, ...data] = sheet.getDataRange().getRichTextValues();
let col = header.map(h => h.getText()).indexOf('Jira ids');
let builders = data.map(r => {
let text = r[col].getText();
if (text.includes("TTSD-")) {
let builder = r[col].copy();
let re = /TTSD-\d+/g;
let result;
while (result = re.exec(text)) {
let startIndex = result.index;
let endIndex = startIndex + result[0].length;
builder.setLinkUrl(startIndex, endIndex, 'https://jira.tools/browse/' + result[0]);
}
return [builder.build()];
}
return [r[col]];
});
sheet.getRange(2, col + 1, builders.length, 1).setRichTextValues(builders);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1576 次 |
| 最近记录: |