gpt4 book ai didi

google-apps-script - 从 Google 表格中的另一张表格输入特定数据时添加时间戳

转载 作者:行者123 更新时间:2023-12-04 18:18:26 25 4
gpt4 key购买 nike

我有一个 Google Sheet包含两张表,一张名为 Form,另一张为 Data。数据表上的信息通常通过表单输入,其中单击表单上的按钮将数据发送到数据表的底行。

我试图弄清楚当 D 列中同一行上的单元格接收到“已清理”一词作为表单提交或作为数据表上的直接手动输入。

此代码当前添加时间戳,但仅当我直接在数据表上更改 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());
}
}
}

我正在使用此代码从表单传输数据:
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()
}

仅输入“已清洁”一词时,自动添加日期的最佳方法是什么?如果删除了“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()
}

最佳答案

更新 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()
}

基本上,我声明了一个新的数组变量( 现在 )并将其连接到现有的 数据 数组,从而形成一个“newData”变量,然后更新 setValues功能来适应这种变化。

希望这会有所帮助,并感谢您分享对工作表的 View 访问权限 - 我制作了一份副本并直接测试了解决方案:)

编辑注释1

至于仅在选择的下拉列表为“已清理”时更新工作表,请修改您的 onEdit()功能以容纳以下 中频健康)状况 -
var statusValue = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form').getRange("B6").getValue();
if (statusValue == 'CLEANED') {
// update timestamp as required
}

关于google-apps-script - 从 Google 表格中的另一张表格输入特定数据时添加时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58259797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com