提问人:LionelHutz 提问时间:10/6/2023 最后编辑:LionelHutz 更新时间:10/13/2023 访问量:48
将旧的 RTF URL 设置为编辑的单元格
Set old RTF URL to edited cell
问:
我的列 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"
}
}
}
答:
0赞
NEWAZA
10/7/2023
#1
我不知道如何访问旧 URL(因为它是富文本格式,并且在编辑时已被覆盖)。
编辑单元格时,仅以字符串形式提供旧值,仅此而已。oldValue
一个想法可能是创建一个隐藏的工作表来存储当前富文本的 url/超链接。我有一个项目可以做类似的事情,尽管将链接的历史“版本”存储在隐藏的工作表中。
逻辑:
onEdit(编辑)
- 如果列的新值是超链接,则存储到当前行索引处的隐藏工作表。
- 如果新值(列)不是超链接,则从隐藏的工作表(在当前行索引处)还原。
评论
0赞
LionelHutz
10/13/2023
多谢。我添加了用于最初添加 URL 的代码(它是指向日历事件的链接)。感谢您让我知道我如何最好地创建一个索引来存储 URL,如果值被调整或覆盖,稍后将其作为 RTF 放回单元格中。
评论
saves the old URL