** 我在這個問題前面附加的資訊 **
假設我想在我的 Google 表格中輸入一個名為 Alice 的用戶。
在我將 Alice 輸入 A2 之后,Alice 也將出現在 B2 中(添加了如 Apps 腳本中所示的超鏈接)。
這樣可行。那挺好的。
但是……現在,假設我有一個文本檔案,其中 Alice 在第 1 行,Bob 在第 2 行,Carl 在第 3 行。當然,我可以將 Alice 復制到 A2,然后將 Bob 復制到 A3,最后復制卡爾進入A4。那會奏效,但是,那顯然會很乏味。
當然,相反,我想所有的三線(包含所有3名)復制一次。此外,我還想一次性將 Alice 粘貼到 A2,Bob 粘貼到 A3,并將 Carl 粘貼到 A4 (按照 Apps 腳本中的指示添加超鏈接)。
** 我原來的問題 **
這個 Google Sheet --> Behance.net- 示例電子表格表明了我想要完成的作業。
在與上面鏈接的作業表打開后不久,我在繪圖中創建的注釋中會顯示以下資訊。
當我進入aaa 時,它起作用了。當我進入bbb 時,它起作用了。當我粘貼ccc、ddd 和 eee 時,它失敗了。
“它有效”是什么意思?例如,這意味著我在 A3 中輸入aaa后立即創建了一個超鏈接,并且 A3 的副本出現在 B3 中。
“失敗了”是什么意思?例如,這意味著在我將ccc、ddd 和 eee一次性粘貼到 A6、A7 和 A8 之后(即一次不粘貼)后,沒有任何反應。也就是說,未創建超鏈接,并且 A6、A7 和 A8 的副本未能出現在 B6、B7 和 B8 中。
上面的“魔法”發生在以下 Apps 腳本中......
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
const value = e.value;
console.log(value);
if (sheet.getName() == "RemcoE33" && range.getColumn() < 3 && range.getRow() > 1) {
const urls = [`https://www.behance.net/${value}`,`https://www.behance.net/${value}/moodboards`];
const richTextValues = [];
console.log(urls);
urls.forEach(url => {
richTextValues.push(SpreadsheetApp.newRichTextValue()
.setText(value)
.setLinkUrl(url)
.build())
});
sheet.getRange(range.getRow(), 1, 1, 2).setRichTextValues([richTextValues]);
}
}
uj5u.com熱心網友回復:
試試這個來了解它是如何作業的以及如何調整你的腳本:
function onEdit(e){
Browser.msgBox(JSON.stringify(e))
}
當單個單元格被修改時:
{"authMode":"LIMITED","value":"c","oldValue":"A","user":{"email":"[email protected]","nickname":xxxxxxxxxx"},"range":{"columnEnd":3,"columnStart":3,"rowEnd":1,"rowStart":1},"source":{}}
當兩個或多個單元格被修改時:
{"user":{"email":"[email protected]","nickname":"xxxxxxxxxx"},"range":{"columnEnd":3,"columnStart":3,"rowEnd":4,"rowStart":1},"authMode":"LIMITED","source":{}}
因此,您可以隨時通過以下方式識別范圍:
var range = [e.range.columnEnd,e.range.columnStart,e.range.rowEnd,e.range.rowStart]
因此,您可以隨心所欲地進行,例如:
function onEdit(e){
var sh = e.source.getActiveSheet()
for (var i = e.range.rowStart;i<=e.range.rowEnd;i ){
for (var j = e.range.columnStart;j<=e.range.columnEnd;j ){
// do something ... as
sh.getRange(i,j).setBackground('red')
}
}
}
“新值”也可通過sh.getRange(i,j).getValue()(不是舊值)獲得
編輯:應用到您的腳本
我認為您可以通過這種方式保留腳本的核心(如果它按您的預期作業)
function onEdit(e){
var sh = e.source.getActiveSheet()
for (var i = e.range.rowStart;i<=e.range.rowEnd;i ){
for (var j = e.range.columnStart;j<=e.range.columnEnd;j ){
myFunction(sh,sh.getRange(i,j),sh.getRange(i,j).getValue())
}
}
}
function myFunction(sheet,range,value){
if (sheet.getName() == "RemcoE33" && range.getColumn() < 3 && range.getRow() > 1) {
const urls = [`https://www.behance.net/${value}`,`https://www.behance.net/${value}/moodboards`];
const richTextValues = [];
console.log(urls);
urls.forEach(url => {
richTextValues.push(SpreadsheetApp.newRichTextValue()
.setText(value)
.setLinkUrl(url)
.build())
});
sheet.getRange(range.getRow(), 1, 1, 2).setRichTextValues([richTextValues]);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404520.html
標籤:
