从编辑前的值中获取富文本的URL

问题描述 投票:0回答:1

我的脚本的 F 列已激活日期验证(短日期)。 F 列中的所有单元格都包含带有日历事件 URL 的富文本:

每次编辑 F 列(= 设置为新日期)时,我希望我的脚本访问日历事件,并将其更新为新日期。 (这不是我的问题的一部分,但解释了我最终想要实现的目标)。

问题是,如果不使用日期选择器,富文本中的 URL 可能会被其他用户覆盖和删除。我还没有找到在富文本中保留 URL 的方法。我可以获取编辑前的旧值 (e.oldValue),但不能获取 URL。

我需要我的脚本来获取 URL 并在日期更改后将其作为 RTF 放回单元格(默认情况下,因为其他用户是否使用日期选择器或输入与给定验证格式匹配的手动日期并不重要).

URL 不会更改,因为日历事件保持不变。

非常感谢任何帮助,提前致谢!

google-apps-script google-sheets datepicker rtf
1个回答
0
投票

虽然我不确定我是否能正确理解你的问题,但是下面的示例脚本怎么样?

示例脚本:

请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中。并且,请设置

sheetName

首先,请运行

init()
函数。这样,“F”列当前单元格的 URL 就会保存到 PropertiesService 中。

下一步,请手动修改电子表格上“F”列的值。这样,

onEdit
就会通过简单的触发器自动运行。并且,URL 设置为编辑的单元格。

const sheetName = "Sheet1"; // Please set your sheet name.

// First, please run this function.
function init() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const urls = sheet.getRange("F1:F" + sheet.getLastRow()).getRichTextValues().map(([f]) => f.getLinkUrl() || "");
  PropertiesService.getScriptProperties().setProperty("urls", JSON.stringify(urls));
}

function onEdit(e) {
  const { range } = e;
  const sheet = range.getSheet();
  if (sheet.getSheetName() != sheetName || range.columnStart != 6) return;
  const propUrls = PropertiesService.getScriptProperties().getProperty("urls");
  const urls = propUrls ? JSON.parse(propUrls) : [];
  const url = urls[range.rowStart - 1];
  if (!url) return;
  range.setRichTextValue(range.getRichTextValue().copy().setLinkUrl(url).build());
}

注:

  • 此示例脚本是

    I need my script to obtain the URL & put it back to the cell as RTF after the date was changed
    的简单示例脚本。请注意这一点。

  • Google Apps 脚本的属性服务规范可以在此报告(作者:我)中查看。如果您的情况超出了属性服务的当前规范,则可能需要使用临时电子表格。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.