我正在嘗試使用標題列創建鍵值對,盡管我能夠獲取值,但我的 forEach 正在按日期或描述對所有值進行分組,而不是每行中的每個專案以理想的輸出顯示。
可能有比我的方法更簡單的方法來執行此操作,因此如果有針對應用程式腳本的嘗試過且真實的方法,我就可以接受建議,我只是在這里學習。

function tableToObject () {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const transactionSheet = ss.getSheetByName('Transactions')
const lastRow = transactionSheet.getLastRow()
const lastColumn = transactionSheet.getLastColumn()
const originalData = transactionSheet.getRange(1, 1, lastRow - 1,lastColumn).getValues()
Logger.log(originalData)
const headers = originalData[0] // Extract headers
Logger.log(headers)
const body = originalData.slice(1)
const keys = {}
let i = 0
headers.forEach(function (c) {
keys[c] = []
body.map(r => keys[c].push(r[i]))
i })
Logger.log(keys)
}
理想輸出
[{
"date": "1/4/2019",
"category": "Source A",
"amount": "100",
"month": "January",
"year": "2019",
"group": "COGS",
"debit/credit": "Credit",
}, {
"date": "1/4/2019",
"category": "Source A",
"amount": "100",
"month": "January",
"year": "2019",
"group": "COGS",
"debit/credit": "Credit",
}
]
uj5u.com熱心網友回復:
改裝要點:
- 關于
const originalData = transactionSheet.getRange(1, 1, lastRow - 1,lastColumn).getValues(),在這種情況下,不檢索最后一行。 - 在您的 中
forEach,每列值都放在一個陣列中。在這種情況下,根據您的預期輸出值,我認為每個列值都必須是具有標題鍵和值的物件。
當這些點反映到你的腳本中時,它變成如下。
修改后的腳本:
function tableToObject() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const transactionSheet = ss.getSheetByName('Transactions');
const lastRow = transactionSheet.getLastRow();
const lastColumn = transactionSheet.getLastColumn();
const [headers, ...originalData] = transactionSheet.getRange(1, 1, lastRow, lastColumn).getValues();
const res = originalData.map(r => headers.reduce((o, h, j) => Object.assign(o, {[h]: r[j]}), {}));
console.log(res)
}
- 如果您不想檢索最后一行,請修改
lastRow為lastRow - 1。
參考:
- 降低()
- Object.assign()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332714.html
上一篇:SQL映射一行中的最大值和最小值,下一行中的下一個最大值和下一個最小值,依此類推
下一篇:撰寫腳本來比較值?[復制]
