我有一個作業表,每隔一小時左右就會在底部記錄新的行和新的值。
有時API呼叫會出現一些錯誤。我改變了loading...的錯誤資訊,但是我仍然希望有一種方法可以從列中過濾掉這些錯誤,并且如果這個單元格沒有錯誤的話,就用上面的單元格中的值來替換這個值。
我是這樣開始的:
function deleteErrors(){
let sheet = SpreadsheetApp.getActiveSpreadsheet()。 getSheetByName("CELL_ERRORS"/span>)。
let checkRange = sheet.getRange(1, 1, sheet. getLastRow(), 2)。getDisplayValues()。
let rangeReversed = checkRange.reverse()。
console.log(rangeReversed)。
}
我如何洗掉"Loading...",并用上面的單元格的值代替它,如果上面的單元格沒有錯誤,或者在陣列的情況下,用下面的值代替,因為我使用了反向。我使用了反向,因為我的想法是從底部開始過濾,因為行被記錄在底部。
但是這個陣列并不是那么重要,我想。
基本上,我只需要讓有Loading...錯誤的單元格被上面的單元格的值所覆寫,當然,如果上面的單元格沒有Loading...。
這可能嗎?也許有一些方法可以使用公式來實作,但我更喜歡使用Apps Script。
我試過這樣的方法:
function deleteErrors(){
let sheet = SpreadsheetApp.getActiveSpreadsheet()。 getSheetByName("CELL_ERRORS"/span>)。
let checkRange = sheet.getRange(1, 1, sheet. getLastRow(), 2).getDisplayValues()。
let rangeReversed = checkRange.reverse()。
console.log(rangeReversed)。
//獲取第1列上有錯誤的單元格的行數。
let cellsCol1 = sheet.getRange(1, 1, sheet. getLastRow(), 1, sheet.) createTextFinder("Loading...")。findAll()。 map(x => x.getRowIndex() )。
console.log(cellCol1)。
//獲得第1列上有錯誤的單元格的行號(希望這些單元格不會有錯誤!)。
let okCellsCol1 = cellsCol1.map(x => x - 1) 。
console.log(okCellsCol1)。
//獲取第2列上有錯誤的單元格的行數。
let cellsCol2 = sheet.getRange(1, 2, sheet. getLastRow(), 2, sheet.) createTextFinder("Loading...")。findAll()。 map(x => x.getRowIndex() )。
console.log(cellCol2)。
//獲得第2列上有錯誤的單元格的行號(希望這些單元格不會有錯誤!)。
let okCellsCol2 = cellsCol2.map(x => x - 1) 。
console.log(okCellsCol2)。
}
它不作業,但我怎么能從這里走呢?
我的檔案。 https://docs.google.com/spreadsheets/d/1ExXtmQ8nyuV1o_UtabVJ-TifIbORItFMWjtN6ZlruWc/edit?usp=sharing
uj5u.com熱心網友回復:
你想實作以下情況。(這些圖片來自于OP的問題。)
你想實作以下情況(這些圖片來自于OP的問題)
你想實作以下情況
來自

To

在這種情況下,下面的修改后的腳本如何呢?
修改后的腳本:
let sheet = SpreadsheetApp. getActiveSpreadsheet().getSheetByName("CELL_ERRORS") 。
let checkRange = sheet.getRange(1, 1, sheet. getLastRow(), 2).getDisplayValues()。
// I modified below script.
const values = checkRange.map(([a, b], i, ar) => //span> {
if (i > 0) {
return [a == " Loading..." ? ar[i - 1][0] : a, b == "Loading..." ? ar[i - 1][1] : b] 。
}
return [a, b];
});
console.log( values)
注意:
- 在這個修改后的腳本中,當第1行包括
Loading...時,Loading...被使用。如果你想用其他的方式來代替它,請告訴我。
參考資料:
添加的內容:
關于我們如何將數值覆寫回單元格?和我們如何將數值覆寫回單元格?此外,在我的主檔案中,我有21列。這對兩列是有效的。如果我增加第三列,它不會對陣列中的第三列做同樣的事情。最后,如果一行中的兩個單元格有錯誤(一個在另一個上面),加載...不會消失。在評論中,我對上述腳本進行了如下更新。
修改后的腳本:
let sheet = SpreadsheetApp。 getActiveSpreadsheet().getSheetByName("CELL_ERRORS"/span>)。
let checkRange = sheet.getRange(1, 1, sheet. getLastRow(), 3)。
const currentValues = checkRange.getDisplayValues();
const transposed = currentValues[0].map((_, c) => /span> currentValues. map(r => r[c]) )。
const transposedValues = transposed.map(row => {
let temp = ";
return row.map((e, i) =>/span> {
if (i > 0) {
if (e == " Loading...") {
return temp;
} else {
temp = e;
}
} else {
temp = e;
}
return e;
});
});
const values = transposedValues[0].map((_, c) => /span> transposedValues。 map(r =>r[c]))。
console.log( values)
checkRange.setValues(values)。
- 在這個修改中,我認為你的額外情況可能會被填補。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330549.html
標籤:




