我需要在 2 個電子表格之間進行 2 路同步,我找到了這個解決方案。
這是上面鏈接中的腳本。是的,我確實修改了“TheSheetNameToCheck”和 targetFile/targetSheet。
//Author: RemcoE33
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
const value = e.value;
if (
sheet.getName() == 'TheSheetNameToCheck'
&& range.getColumn() >= 5
&& range.getColumn() <= 31
&& range.getRow() >= 14
&& range.getRow() <= 20
) {
const targetFile = SpreadsheetApp.openById('1hVcBM7Tzkg40YxxxxxxxxxF3prATgF8')
const targetSheet = targetFile.getSheetByName('TheSheetNameToCheck')
const a1 = range.getA1Notation()
targetSheet.getRange(a1).setValue(value)
}
}
問題是當我運行腳本時,我收到一條錯誤訊息“TypeError:無法讀取未定義的屬性'源'”,我不知道如何繼續。
uj5u.com熱心網友回復:
修改點:
雖然,不幸的是,我無法理解
I found this [solution][1],在你的腳本中,function onEdit(e) {,,,}使用了。在這種情況下,腳本由 OnEdit 的簡單觸發器運行。當 OnEdit 觸發器運行腳本時,e會給出事件物件。但是,從您顯示的錯誤訊息來看TypeError: Cannot read property 'source' of undefined,我擔心您可能會使用腳本編輯器運行腳本。在這種情況下,e沒有給出 的值。這樣,就會發生這樣的錯誤。參考- 當您使用事件物件運行此腳本時,請編輯一個單元格。這樣,腳本將自動運行。
但是,當我看到你的腳本時,
SpreadsheetApp.openById('###')就被使用了。在這種情況下,SpreadsheetApp.openById('###')不能與簡單觸發器一起使用。因此,為了運行您的腳本,需要使用 OnEdit 的可安裝觸發器。
當這些點反映在你的腳本中時,下面的修改怎么樣?
修改后的腳本:
請將以下腳本復制并粘貼到電子表格的腳本編輯器中。并且,請將 OnEdit 觸發器安裝到installedOnEdit. 運行此腳本時,請編輯sheet.getName() == 'TheSheetNameToCheck' && range.getColumn() >= 5 && range.getColumn() <= 31 && range.getRow() >= 14 && range.getRow() <= 20. 這樣,腳本就運行了。
function installedOnEdit(e) { // Renamed function name.
const sheet = e.source.getActiveSheet();
const range = e.range;
const value = e.value;
if (
sheet.getName() == 'TheSheetNameToCheck'
&& range.getColumn() >= 5
&& range.getColumn() <= 31
&& range.getRow() >= 14
&& range.getRow() <= 20
) {
const targetFile = SpreadsheetApp.openById('1hVcBM7Tzkg40YxxxxxxxxxF3prATgF8');
const targetSheet = targetFile.getSheetByName('TheSheetNameToCheck');
const a1 = range.getA1Notation();
targetSheet.getRange(a1).setValue(value);
}
}
- 編輯單元格時,將運行此腳本。
- 在此修改中,為了避免重復執行簡單且可安裝的 OnEdit 觸發器,更改了函式名稱。
筆記:
從你的報錯資訊來看,如果你想直接用腳本編輯器運行腳本,那么下面的修改呢?在這種情況下,在您選擇 的一個單元格后
sheet.getName() == 'TheSheetNameToCheck' && range.getColumn() >= 5 && range.getColumn() <= 31 && range.getRow() >= 14 && range.getRow() <= 20,當您使用腳本編輯器運行此腳本時,將使用當前選定的單元格運行該腳本。function myFunction() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const range = sheet.getActiveCell(); const value = range.getValue(); if ( sheet.getName() == 'TheSheetNameToCheck' && range.getColumn() >= 5 && range.getColumn() <= 31 && range.getRow() >= 14 && range.getRow() <= 20 ) { const targetFile = SpreadsheetApp.openById('1hVcBM7Tzkg40YxxxxxxxxxF3prATgF8'); const targetSheet = targetFile.getSheetByName('TheSheetNameToCheck'); const a1 = range.getA1Notation(); targetSheet.getRange(a1).setValue(value); } }
參考:
- 簡單觸發器
- 可安裝觸發器
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520066.html
上一篇:應用腳本表單提交后提交到未知地址
下一篇:如何在C中實作并行性?
