google-apps-script - About Google Sheets that is shared with users
问题描述
I have a Google Sheets shared with others. My sheet name is "OrderList". I am looking for a script that grabs the user's email address and inputs into another cell when a user edits the sheet. I have written the following code, however it only returns the sheet owner's Gmail address:
var COLUMNTOCHECK1 = 5;
var COLUMNTOCHECK2 = 6;
var DATETIMELOCATION1 = [0,2];
var DATETIMELOCATION2 = [0,3];
var SHEETNAME = 'OrderList'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK1) {
var email = Session.getActiveUser().getEmail();
var dateTimeCell =
selectedCell.offset(DATETIMELOCATION1[0],DATETIMELOCATION1[1]);
dateTimeCell.setValue(new Date());
var dateTimeCell1 =
selectedCell.offset(DATETIMELOCATION2[0],DATETIMELOCATION2[1]);
dateTimeCell1.setValue(email);
}
if( selectedCell.getColumn() == COLUMNTOCHECK2) {
var dateTimeCell =
selectedCell.offset(DATETIMELOCATION2[0],DATETIMELOCATION2[1]);
dateTimeCell.setValue(new Date());
}
}
}
解决方案
由于您正在运行它,因此onEdit(e)
您可以使用Event Objects,这些非常适合捕获您尝试获取的数据。不过,您需要为您的项目设置一个 onEdit 触发器来捕获电子邮件地址。下面的代码应该达到您的预期。
var COLUMNTOCHECK1 = 5;
var COLUMNTOCHECK2 = 6;
var DATETIMELOCATION1 = [0,2];
var DATETIMELOCATION2 = [0,3];
var SHEETNAME = 'OrderList'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK1) {
var email = e.user.getEmail();
var dateTimeCell =
selectedCell.offset(DATETIMELOCATION1[0],DATETIMELOCATION1[1]);
dateTimeCell.setValue(new Date());
var dateTimeCell1 =
selectedCell.offset(DATETIMELOCATION2[0],DATETIMELOCATION2[1]);
dateTimeCell1.setValue(email);
}
if( selectedCell.getColumn() == COLUMNTOCHECK2) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION2[0],DATETIMELOCATION2[1]);
dateTimeCell.setValue(new Date());
}
}
}
如您所见,我已将您更改var email
为使用事件对象来捕获正在编辑电子表格的用户的电子邮件地址:
var email = e.user.getEmail();
推荐阅读
- javascript - 为什么在使用模式时触发 useEffect 而不改变依赖关系?
- java - 如何对 java.util.Arrays.toString 使用静态导入?
- php - 未找到 Laravel 注册索引并创建错误
- multithreading - 非负原子递增,非正原子递减
- c# - Netcore razor 使用 CloudFront 生成错误的 URL
- python - 如何从 Python 中的字符串列表创建目录树?
- office365 - 是否有使用 Outlook Web 加载项创建约会的功能?
- angular - Angular Material - 从 mat-tree 中删除重复节点
- sql - 错误:关系“schema.TableName_Id_seq”不存在 - 在新数据库中创建表时
- bash - BSD Grep patternfile (-f) 跳过包含先前模式的子字符串的模式。订购敏感?