将旧的 RTF URL 设置为编辑的单元格

Set old RTF URL to edited cell

提问人:LionelHutz 提问时间:10/6/2023 最后编辑:LionelHutz 更新时间:10/13/2023 访问量:48

问:

我的列 F 包含一个富文本格式 (rtf) 的值,该值还包含一个 URL。

当用户编辑此列中的单元格时,根据他们的操作方式(双击文本,或只需单击单元格并开始键入),他们能够覆盖富文本,因此 URL 会消失。

我需要一个可安装的 onEdit 触发器来保存旧 URL,并在编辑 F 列中的单元格时将其作为 RTF 放回单元格。

我知道我可以访问旧的 VALUE (e.oldValue),但我不知道如何访问旧的 URL(因为它是富文本格式,并且在编辑时已被覆盖)。

有什么想法吗?

我必须在这里使用 RTF,因为该列已激活数据验证并且不接受超链接。

编辑:这是用于最初将URL添加为富文本的代码。

    function ShowStatusEdit(e) {
      const editedColumn = e.range.getColumn(); // Get the edited column number
    
      // Check if the edited column is NOT Column N (index 14)
      if (editedColumn !== 14) {
        return; // Exit the function early
      }
    
      const editedValue = e.value; // Get the edited value
    
      // Continue with logic for Column N edits and "Confirmed" value
      if (editedValue === "Confirmed") {
        const ss = e.source;
        const sheet = ss.getActiveSheet();
        const row = e.range.getRow();
        const eventCategory = sheet.getRange(row, 11).getValue();
        const showDate = sheet.getRange(row, 6).getValue();
    
        // Check if the first four characters of eventCategory are not "Sold", "Fest", or "Tour"
        if (eventCategory.indexOf("Sold") !== 0 && eventCategory.indexOf("Fest") !== 0 && eventCategory.indexOf("Tour") !== 0) {
        
      // CALENDAR ENTRY FOR SHOW
        if (showDate instanceof Date) {
          const startTime = new Date(showDate);
          startTime.setHours(19, 0, 0, 0); // Set the time to 19:00
          const endTime = new Date(showDate);
          endTime.setHours(23, 30, 0, 0); // Set the time to 23:30
    
            const calendarId = '[email protected]'; // Replace with your calendar ID
            const calendar = CalendarApp.getCalendarById(calendarId);
            const eventTitle = sheet.getRange(row, 7).getValue();
            const eventDescription = `This is a test event`;
            const guestlist = ['[email protected]'];
    
            const eventOptions = {
              description: eventDescription,
              guests: guestlist.join(),
              sendInvites: true,
              sendUpdates: "all",
            };
    
            const newEvent = calendar.createEvent(eventTitle, startTime, endTime, eventOptions);
    
            // Get the event URL using the CalendarApp event's ID
            var ati = calendar.getId().indexOf("@");
            var splitEventId = newEvent.getId().split('@');
            var EventId = Utilities.base64Encode(splitEventId[0] + " " + calendar.getId().substring(0, ati + 2)).replace(/=/gi, '');
            var eventUrl = "https://calendar.google.com/calendar/u/0/r/eventedit/" + EventId;
    
            // Format the showDate variable as a string in the "DD/MM/YYYY" format
            var formattedDate = Utilities.formatDate(showDate, "GMT+0200", "dd/MM/yyyy");
    
            // Create a new rich text value with the event URL
            const richTextWithUrl = SpreadsheetApp.newRichTextValue()
            .setText(formattedDate)
            .setLinkUrl(eventUrl)
            .build();
    
            // Set the updated rich text value in column 6 (F)
            sheet.getRange(row, 6).setRichTextValue(richTextWithUrl);
    
          } else {
            Logger.log('Invalid show date format: ' + showDate);
          // Handle the case where the show date format is not as expected
          }

}else {
      Logger.log('Event category starts with "Sold," "Fest," or "Tour": ' + eventCategory);
        // Handle the case where the event category starts with "Sold," "Fest," or "Tour"
    }
}
}
google-apps 脚本 google-sheets 电子表格 rtf

评论

0赞 Tanaike 10/6/2023
关于,我能问一下你目前的情况吗?因为,从您的问题来看,我认为在您的情况下,保存 URL 的时间可能很重要。首先,我想正确理解您的问题。saves the old URL
0赞 Cooper 10/6/2023
您能否提供用于生成富文本的代码,以便我们为您研究合适的解决方案。
0赞 NEWAZA 10/12/2023
嘿,莱昂内尔,运气好吗?
0赞 LionelHutz 10/13/2023
@NEWAZA感谢您的回复。我知道编辑单元格后无法再直接从单元格中检索 URL。所以我需要以某种方式存储链接。我正在将代码添加到用于创建 URL 的问题中。如果我能以某种方式存储链接而不必拥有秘密工作表,我会更喜欢它。注意:用户可以在任何他们想要的位置添加行。因此,无法存储依赖于相同行顺序的“备份”。
0赞 LionelHutz 10/20/2023
嘿,@NEWAZA你能够调查一下吗?

答:

0赞 NEWAZA 10/7/2023 #1

我不知道如何访问旧 URL(因为它是富文本格式,并且在编辑时已被覆盖)。

编辑单元格时,仅以字符串形式提供旧值,仅此而已。oldValue

一个想法可能是创建一个隐藏的工作表来存储当前富文本的 url/超链接。我有一个项目可以做类似的事情,尽管将链接的历史“版本”存储在隐藏的工作表中。

逻辑:

onEdit(编辑)

  • 如果列的新值是超链接,则存储到当前行索引处的隐藏工作表。
  • 如果新值(列)不是超链接,则从隐藏的工作表(在当前行索引处)还原。

评论

0赞 LionelHutz 10/13/2023
多谢。我添加了用于最初添加 URL 的代码(它是指向日历事件的链接)。感谢您让我知道我如何最好地创建一个索引来存储 URL,如果值被调整或覆盖,稍后将其作为 RTF 放回单元格中。