我有以下腳本,它們從示例電子表格的 Transactions 選項卡中獲取資料,然后在 sumActual 中運行邏輯,例如在 sumActual 選項卡中分組和設定值。這一切都很好。
然而,在 sumActual 函式的末尾,我注意到 // set transactions 處理。我想在“T”列中設定今天的日期以標記已處理的行。但是,我需要使用 sumActuals 中的“ const filterProcessedTransactions ”,因為它會過濾掉那些已經處理過的行。我不太確定該怎么做。
任何幫助都會很棒。
樣品表

uj5u.com熱心網友回復:
示例解決方案:
如果您愿意將腳本運行的所有事務都視為已處理,最簡單的方法是直接設定列值:
這個函式應該這樣做:
function setTransactionsProcessed () {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const transactionSheet = ss.getSheetByName('Transactions')
const lastRow = transactionSheet.getLastRow()
const lastColumn = transactionSheet.getLastColumn()
const range = transactionSheet.getRange(2,lastColumn,lastRow-1)
const processedArr = range.getValues();
for (i = 0; i < processedArr.length; i ) {
if (processedArr[i] == '') {
const d = new(Date);
processedArr[i][0] = d;
}
}
range.setValues(processedArr);
}
這將在過濾掉已處理的交易后呼叫:
const transactions = getTransactions()
console.log({ transactions })
const filterProcessedTransactions = _.filter(transactions, (o) => {
return !moment(o.Processed).isValid()
})
console.log({ filterProcessedTransactions })
setTransactionsProcessed();
// Group By Category
const grouped = _.groupBy(filterProcessedTransactions, (o) => {
return [o.Category, o.Year, o.Month]
})
// console.log({ grouped })
示例輸出:


uj5u.com熱心網友回復:
保留原始索引
您可以這樣做并通過添加名為 idx 的額外列來保留原始索引
function getTransactions () {
const ss = SpreadsheetApp.getActive()
const transactionSheet = ss.getSheetByName('Sheet0')
const lastRow = transactionSheet.getLastRow()
const lastColumn = transactionSheet.getLastColumn()
const values = transactionSheet.getRange(1, 1, lastRow, lastColumn).getValues()
const [headers, ...originalData] = values.map(([, b,, d, e,,,,,,,,,,, p, q, r, s, t]) => [b, d, e, p, q, r, s, t])
const res = originalData.map((r,i) => headers.reduce((o, h, j) => Object.assign(o, { [h]: r[j],idx:i }), {}))
return res;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390168.html
