再會!我一直在努力尋找一種方法來洗掉使用表單回應定位的行,然后將其與先前表單提交中的一列名稱進行比較,以避免電子表格中的重復資料。下面的代碼是我到目前為止所擁有的。如果代碼沒有意義,我深表歉意,因為我試圖適應以前給我的代碼。它有一個類似的概念,我認為它會以某種方式起作用,但它不起作用。
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i ) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j ) {
var itemResponse = itemResponses[1];
var finalitemResponse = itemResponse.getResponse();
nameofclient_runningbalance.setValue(finalitemResponse);
Logger.log(finalitemResponse);
var values = hospitalSheet.getRange(2, 4, hospitalSheet.getLastRow(), 1).getValues();
Logger.log(values);
var { v, cells } = values.reduce((o, r, i) => {
if (r[4] == finalitemResponse) {
hospitalSheet.getRangeList(cells).deleteRows(cells.length, cells[0].length);
o.cells.push(`R${i 2}`);
}
return o;
}, { v: [], cells: [] });
if (v.length == 0) return;
}
}
類似于驗證,其中洗掉使用表單回應給定名稱定位的行,并與充滿名稱的列進行比較。還有其他方法可以通過它,但我想知道是否有一種方法可以通過我現在使用的方法來獲得額外的知識。 非常感謝,上帝保佑!
uj5u.com熱心網友回復:
我相信你的目標如下。
itemResponses[1]
當 的回應值與 的“D”列相同時,您希望洗掉行hospitalSheet
。
修改點:
在您的腳本中,
var values = hospitalSheet.getRange(2, 4, hospitalSheet.getLastRow(), 1).getValues();
從“D”列中檢索值。但是,在values.reduce((o, r, i) => {,,,}
中r[4] == finalitemResponse
使用。在這種情況下,r[4]
沒有元素。并且,在hospitalSheet.getRangeList(cells).deleteRows(cells.length, cells[0].length);
,cell
未宣告。在
nameofclient_runningbalance.setValue(finalitemResponse);
處,這些值被置于相同的范圍內。在你的腳本中,我認為當洗掉程序移到回圈外部時,行程成本可能會降低。
當這些點反映在你的腳本中時,下面的修改怎么樣?
修改后的腳本:
var formResponses = form.getResponses();
var resValues = [];
for (var i = 0; i < formResponses.length; i ) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j ) {
var itemResponse = itemResponses[1];
var finalitemResponse = itemResponse.getResponse();
resValues.push(finalitemResponse)
// nameofclient_runningbalance.setValue(finalitemResponse);
}
}
resValues = [...new Set(resValues)];
var values = hospitalSheet.getRange(2, 4, hospitalSheet.getLastRow(), 1).getValues();
var rows = values.reduce((ar, [d], i) => {
if (resValues.includes(d)) {
ar.push(i 2);
}
return ar;
}, []).reverse().forEach(e => hospitalSheet.deleteRow(e));
或者,
var formResponses = form.getResponses();
var resValues = [];
for (var i = 0; i < formResponses.length; i ) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j ) {
var itemResponse = itemResponses[1];
var finalitemResponse = itemResponse.getResponse();
resValues.push(finalitemResponse)
// nameofclient_runningbalance.setValue(finalitemResponse);
}
}
resValues = [...new Set(resValues)];
var range = hospitalSheet.getDataRange();
var [header, ...values] = range.getValues();
var newValues = [header, ...values.filter(r => !resValues.includes(r[3]))];
range.clearContent();
hospitalSheet.getRange(1, 1, newValues.length, newValues[0].length).setValues(newValues);
- 運行這些腳本時,將從 中檢索值
itemResponses[1]
,并通過從 的列“D”中搜索檢索到的值來洗掉行hospitalSheet
。
筆記:
在此修改中,它假定
form
并且hospitalSheet
在其他地方宣告。請注意這一點。在此修改中,它假設從您的顯示腳本中,從 .d 的“D”列中搜索該值
hospitalSheet
。請注意這一點。如果這與您的實際情況不同,您能否提供示例電子表格作為影像?借此,我想確認一下。如果您需要使用
nameofclient_runningbalance.setValue(finalitemResponse);
,請洗掉//
。
參考:
- 減少()
- 篩選()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520062.html
標籤:谷歌应用脚本