函数,用于移动用JavaScript编写的列,但在Google工作表中不起作用
我有一个javascript函数,来自 我试着用我所掌握的稀疏知识将它转换成适合谷歌工作表的格式,但还没有成功 函数用于将数组中的列从列表中的索引中移位 我使用的是chrome V8 函数给出了一个错误,即无法读取未定义的属性长度 sht2.getRange1,1,result.length,结果[0]。length.setValuesresult 谢谢 这就是id所做的函数,用于移动用JavaScript编写的列,但在Google工作表中不起作用,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个javascript函数,来自 我试着用我所掌握的稀疏知识将它转换成适合谷歌工作表的格式,但还没有成功 函数用于将数组中的列从列表中的索引中移位 我使用的是chrome V8 函数给出了一个错误,即无法读取未定义的属性长度 sht2.getRange1,1,result.length,结果[0]。length.setValuesresult 谢谢 这就是id所做的 Bob|Carol|Ted|Alice a |b |c |d 1 |2 |3 |4 A |B |
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
主要的问题是,您没有从“重新排列”返回任何内容。另一个问题是,您实际上并没有执行重新排列逻辑,而是将该函数保存到变量REQUATE中 不需要将逻辑保存在REQUATE函数内部的REQUATE变量中。你可以把那部分拿出来
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('users');
var rng = sht.getDataRange();
var data = rng.getValues();
var tofront = [2,3]
var result = rearrange(data, tofront)
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, result.length, result [0].length).setValues(result );
}
function rearrange(rows = [], toFront = []) {
var originalHeaders = [...rows[0]]
var remainingHeaders = [...rows[0]]
var frontHeaders = toFront.map(index => {
remainingHeaders[index] = null
return originalHeaders[index]
})
var newHeaders = [
...frontHeaders,
...remainingHeaders.filter(v => v !== null)
]
return rows.map(r => {
let row = {}
r.forEach((value, i) => {
row[originalHeaders[i]] = value
})
return newHeaders.map(h => row[h])
});
}
*您还引用了倒数第二个映射中的数据,但这应该是如上所述的行。主要问题是您没有从“重新排列”返回任何内容。另一个问题是,您实际上并没有执行重新排列逻辑,而是将该函数保存到变量REQUATE中 不需要将逻辑保存在REQUATE函数内部的REQUATE变量中。你可以把那部分拿出来
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('users');
var rng = sht.getDataRange();
var data = rng.getValues();
var tofront = [2,3]
var result = rearrange(data, tofront)
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, result.length, result [0].length).setValues(result );
}
function rearrange(rows = [], toFront = []) {
var originalHeaders = [...rows[0]]
var remainingHeaders = [...rows[0]]
var frontHeaders = toFront.map(index => {
remainingHeaders[index] = null
return originalHeaders[index]
})
var newHeaders = [
...frontHeaders,
...remainingHeaders.filter(v => v !== null)
]
return rows.map(r => {
let row = {}
r.forEach((value, i) => {
row[originalHeaders[i]] = value
})
return newHeaders.map(h => row[h])
});
}
*您还引用了倒数第二张地图中的数据,但那应该是如上所示的行。您没有回写电子表格抱歉,只是更新了函数Rebeat不返回任何内容您没有回写电子表格抱歉,只是更新了函数Rebeat不返回任何内容这是汗水!!非常感谢。迭戈,为什么用forEach而不是地图谢谢again@Einarr很高兴它起作用了。我建议你去问原作者,因为我根本没有检查任何一个。这是汗水!!非常感谢。迭戈,为什么用forEach而不是地图谢谢again@Einarr很高兴它起作用了。我建议你去问原作者,因为我根本没有检查过这些。
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('users');
var rng = sht.getDataRange();
var data = rng.getValues();
var tofront = [2,3]
var result = rearrange(data, tofront)
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, result.length, result [0].length).setValues(result );
}
function rearrange(rows = [], toFront = []) {
var originalHeaders = [...rows[0]]
var remainingHeaders = [...rows[0]]
var frontHeaders = toFront.map(index => {
remainingHeaders[index] = null
return originalHeaders[index]
})
var newHeaders = [
...frontHeaders,
...remainingHeaders.filter(v => v !== null)
]
return rows.map(r => {
let row = {}
r.forEach((value, i) => {
row[originalHeaders[i]] = value
})
return newHeaders.map(h => row[h])
});
}