我有一个从这里得到的 javascript 函数
我试图用我所拥有的稀疏知识将它放入谷歌表格的正确格式,但还没有让它工作
该函数从我正在使用 chrome V8 的列表中的索引中移动数组中的列
该函数给出了Cannot read property length of undefined错误
sht2.getRange(1,1, result.length, result [0].length).setValues(result )
谢谢
这就是 id 的作用
Bob|Carol|Ted|Alice
a |b |c |d
1 |2 |3 |4
A |B |C |D
如果索引列表是 list=[3] 所以我得到
Alice|Bob|Carol|Ted
d |a |b |c
4 |1 |2 |3
D |A |B |C
列表 = [2,3]
Ted|Alice|Bob|Carol
c |d |a |b
3 |4 |1 |2
C |D |A |B
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('users');
var rng = sht.getDataRange();
var data = rng.getValues();
var tofront = [2,0,28,4]
var result = rearrange(data, [2,0,28,4])
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, result.length, result [0].length).setValues(result );
}
function rearrange(rows, tofront) {
var rearrange = (rows=[], toFront=[]) => {
var originalHeaders = [...rows[0]]
var remainingHeaders = [...rows[0]]
var frontHeaders = toFront.map(index => {
// set this one to null, to be filtered out later
remainingHeaders[index] = null
// grab the original header value
return originalHeaders[index]
})
// you don't want to modify the original headers directly,
// seeing as you might not end up with the desired result
// if you pass a `toFront` value like [1,2] or where
// any of the values come after another
var newHeaders = [
...frontHeaders,
...remainingHeaders.filter(v => v !== null)
]
return data.map(r => {
let row = {}
r.forEach((value, i) => {
row[originalHeaders[i]] = value
})
return newHeaders.map(h => row[h])
})
}
}