J. *_*sek 5 google-apps-script
我有一个包含两个工作表的Google工作表,一个工作表名为Form,另一个工作表Data。数据表上的信息通常是通过表单表输入的,单击表单表上的按钮会将数据发送到数据表的最底行。
我试图弄清楚如何在D列同一行上的单元格收到“ CLEANED”一词作为表单表单中的提交或将时间戳添加到数据表中E列中的适当单元格时在数据表上直接手动输入。
该代码当前添加时间戳,但是仅当我直接在数据表的D列中更改值时(而不是通过表单表单添加值时),它就会为添加的任何值添加时间戳。
var ColumnToCheck = 4;
var DateTimeLocation = [0,1];
var sheetName = 'Data'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == sheetName ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == ColumnToCheck) {
var dateTimeCell = selectedCell.offset(DateTimeLocation[0],DateTimeLocation[1]);
dateTimeCell.setValue(new Date());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码来传输表单中的数据:
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("Form");
var dataSheet = ss.getSheetByName("Data");
var values = formSS.getRange("B2:B5").getValues().reduce(function(a, b) {
return a.concat(b)
});
var partNum = values[0];
var row;
dataSheet.getDataRange().getValues().forEach(function(r, i) {
if (r[0] === partNum) {
row = i + 1
}
})
row = row ? row : dataSheet.getLastRow() + 1;
var data = dataSheet.getRange(row, 1, 1, 4).getValues()[0].map(function (el, ind){
return el = values[ind] ? values[ind] : el;
})
dataSheet.getRange(row, 1, 1, 4).setValues([data]);
formSS.getRange("B2:B5").clearContent()
}
Run Code Online (Sandbox Code Playgroud)
仅输入单词“ CLEANED”时自动添加日期的最佳方法是什么?如果删除了“清除”一词或将其更改为其他词,则日期不应该清除。
感谢Sourabh Choraria,我能够将UPDATE函数更改为此,以便满足我的需要(对我添加到他的代码中的内容进行了评论):
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("Form");
var dataSheet = ss.getSheetByName("Data");
var values = formSS.getRange("B3:B6").getValues().reduce(function(a, b) {
return a.concat(b)
});
var partNum = values[0];
var row;
dataSheet.getDataRange().getValues().forEach(function(r, i) {
if (r[0] === partNum) {
row = i + 1
}
})
row = row ? row : dataSheet.getLastRow() + 1;
var data = dataSheet.getRange(row, 1, 1, 4).getValues()[0].map(function (el, ind){
return el = values[ind] ? values[ind] : el;
})
var statusValue = formSS.getRange("B6").getValue(); //added
if (statusValue != 'CLEANED') { //added
dataSheet.getRange(row, 1, 1, 4).setValues([data]); //added
} //added
if (statusValue == 'CLEANED') { //added
var now = [new Date()];
var newData = data.concat(now)
dataSheet.getRange(row, 1, 1, 5).setValues([newData]);
} //added
formSS.getRange("B3:B6").clearContent()
}
Run Code Online (Sandbox Code Playgroud)
submitData()使用以下代码更新功能-
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("Form");
var dataSheet = ss.getSheetByName("Data");
var values = formSS.getRange("B2:B5").getValues().reduce(function(a, b) {
return a.concat(b)
});
var partNum = values[0];
var row;
dataSheet.getDataRange().getValues().forEach(function(r, i) {
if (r[0] === partNum) {
row = i + 1
}
})
row = row ? row : dataSheet.getLastRow() + 1;
var data = dataSheet.getRange(row, 1, 1, 4).getValues()[0].map(function (el, ind){
return el = values[ind] ? values[ind] : el;
})
// modification begins here
var now = [new Date()];
var newData = data.concat(now)
dataSheet.getRange(row, 1, 1, 5).setValues([newData]);
// modification ends here
formSS.getRange("B2:B5").clearContent()
}
Run Code Online (Sandbox Code Playgroud)
基本上,我要声明一个新的数组变量(now)并将其连接到现有的数据数组,从而形成一个“ newData”变量,然后更新该setValues函数以适应此更改。
希望对您有所帮助,并感谢您共享对工作表的视图访问权限-我制作了该副本并直接测试了解决方案:)
至于仅在选择的下拉列表为“ CLEANED”时更新工作表,请修改您的onEdit()函数以适应以下IF条件-
var statusValue = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form').getRange("B6").getValue();
if (statusValue == 'CLEANED') {
// update timestamp as required
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |