我有一个电子表格,用户可以使用注释更新列'J‘中的单元格,但是当他们更新单元格时,我需要运行我的脚本。这将复制列'I‘和'J’中的所有信息,并将它们粘贴到另一个单元格中,然后将一个Vlookup公式放回到'J‘中它刚刚从中获取信息的位置。
这可能听起来很复杂,但因为我有不同的工作表从不同的工作簿中提取信息,所以我需要以这种方式进行。
然而,我尝试了许多解决方案,但无法让它在单元格改变时运行。
我已经尝试了一个可安装的更改触发器,但它在整个工作簿上都有效,并且经常会删除它应该复制的信息。
我已经粘贴了我在下面工作的代码,任何帮助都将不胜感激。
function onChange(e)
{
var editRange = { // J:J
top : 2,
bottom : 2000,
left : 10,
right : 10
};
// Exit if we're out of range
var thisRow = e.range.getRow();
if (thisRow < editRange.top || thisRow > editRange.bottom) return;
var thisCol = e.range.getColumn();
if (thisCol < editRange.left || thisCol > editRange.right) return;
//Where Is The Data Stored That You Want To Copy
var ss = SpreadsheetApp.openById("1ZQLKnCHD9acTXCKpTeOnJshHEz43FDPdKZ-U6Me-k_k")
var West = ss.getSheetByName("West Orders")
var WestNotes = ss.getSheetByName("West Notes")
//Ranges of The Data You Want To Copy
var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues()
//Clear The Data Before Overiding
var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear()
//Ranges Of The Data You Want To Store
var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);
//Put a formula in to update Notes;
var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")'
var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula)
}
发布于 2019-04-15 01:59:27
onEdit事件
更改触发器不是一个简单的触发器。你必须自己安装它。此event object中也没有e.range。我猜,如果你检查了你的执行,你会看到一些错误。
我将您的代码修改为onEdit()简单触发器。但是,如果您正在执行任何需要权限的操作,则可能必须将其设置为可安装。看起来你就是。所以现在你应该能够继续调试你的代码了。
function onEdit(e) {
var editRange = {top:2,bottom:2000,left:10,right:10};
var thisRow=e.range.rowStart;
if (thisRow<editRange.top || thisRow>editRange.bottom)return;
var thisCol=e.range.columnStart;
if (thisCol<editRange.left || thisCol>editRange.right)return;
var ss = SpreadsheetApp.openById("id");
var West = ss.getSheetByName("West Orders");
var WestNotes = ss.getSheetByName("West Notes");
var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues();
var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear();
var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);
var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")';
var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula);
}
我应该提到,您需要在第7行添加id。
发布于 2019-05-03 22:54:06
对脚本第7行的简单更改就彻底解决了这个问题,我使用的是.getActiveSpreadsheet,而不是.openById
https://stackoverflow.com/questions/55677140
复制相似问题