Javascript 将单列拆分为多列每列1000行
我有一个非常大的数据列,我想将其拆分为多个列,每个列包含1000行。我已经在互联网上搜寻任何可能的答案,但找不到解决办法。例子: 前列 我想将上面的列拆分为多个3行的列,使其类似于: 后列 我意识到像这样的事情需要一个脚本。有什么想法吗?我以前在Excel中做过,但没有在Google Sheets中做过。试试这个:Javascript 将单列拆分为多列每列1000行,javascript,google-apps-script,google-sheets,google-sheets-formula,Javascript,Google Apps Script,Google Sheets,Google Sheets Formula,我有一个非常大的数据列,我想将其拆分为多个列,每个列包含1000行。我已经在互联网上搜寻任何可能的答案,但找不到解决办法。例子: 前列 我想将上面的列拆分为多个3行的列,使其类似于: 后列 我意识到像这样的事情需要一个脚本。有什么想法吗?我以前在Excel中做过,但没有在Google Sheets中做过。试试这个: function onetonine() { const ss=SpreadsheetApp.getActive(); const sh=ss.getActiveSheet(
function onetonine() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const vs=sh.getDataRange().getValues().map(function(r){return r[0];});
var a=[];
var b=[];
vs.forEach(function(e,i){
if(i%9==0) {
b=[];
}
b.push(e);
if(i%9==8) {
a.push([b[0],b[3],b[6]],[b[1],b[4],b[7]],[b[2],b[5],b[8]]);
Logger.log('a:%',a);
}
});
Logger.log('final:%s',a);
sh.getRange(sh.getLastRow()+1,1,a.length,3).setValues(a);
}
数据:
结果:
1,4,7
2,5,8
3,6,9
10,13,16
11,14,17
12,15,18
19,22,25
20,23,26
21,24,27
试试这个:
function onetonine() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const vs=sh.getDataRange().getValues().map(function(r){return r[0];});
var a=[];
var b=[];
vs.forEach(function(e,i){
if(i%9==0) {
b=[];
}
b.push(e);
if(i%9==8) {
a.push([b[0],b[3],b[6]],[b[1],b[4],b[7]],[b[2],b[5],b[8]]);
Logger.log('a:%',a);
}
});
Logger.log('final:%s',a);
sh.getRange(sh.getLastRow()+1,1,a.length,3).setValues(a);
}
数据:
结果:
1,4,7
2,5,8
3,6,9
10,13,16
11,14,17
12,15,18
19,22,25
20,23,26
21,24,27
创建具有3列的数字序列数组SEQUENCE
将其转换为一个从上到下计数的3行数组:TRANSPOSE
使用人工创建的数组将人工创建的数字替换为其行值的已创建数组:VLOOKUP
{row(A2:a),A2:a}
创建具有3列的数字序列数组SEQUENCE
将其转换为一个从上到下计数的3行数组:TRANSPOSE
使用人工创建的数组将人工创建的数字替换为其行值的已创建数组:VLOOKUP
{row(A2:a),A2:a}
或者,如果要执行脚本路径,则需要两个实用程序:
3
的块(以获得所需的行数)3
行/**
*@typedef{object}ChunkifyConfig
*@property{number}[size]
*@property{number[]}[限制]
*
*@summary将数组拆分为块
*@param{any[]}源
*@param{ChunkifyConfig}
*@返回{any[][]}
*/
const chunkify=(源,{limits=[],size}={})=>{
常量输出=[];
如果(尺寸){
常量{length}=源;
const maxNumChunks=Math.ceil((长度| | 1)/size);
设numchunkslft=maxmchunks;
while(numchunkslight){
const chunksProcessed=maxNumChunks-numChunksLeft;
常量elemsProcessed=chunksProcessed*大小;
output.push(source.slice(elemsProcessed,elemsProcessed+size));
Numchunksleet--;
}
返回输出;
}
常数{length}=极限;
如果(!长度){
返回[Object.assign([],source)];
}
设lastSlicedElem=0;
限制。forEach((限制,i)=>{
const limitPosition=最后一个slicedelem+限制;
输出[i]=source.slice(lastSlicedElem,limitPosition);
lastSlicedElem=限制位置;
});
const lastChunk=source.slice(lastSlicedElem);
lastChunk.length&&output.push(lastChunk);
返回输出;
};
常数测试=[
[“红色”]、[“蓝色”]、[“黄色”]、[“绿色”]、[“粉色”]、[“橙色”]、[“品红”]、[“棕色”]、[“黑色”]
];
const chunked=chunkify(测试,{size:3})
.map(chunk=>chunk.reduce((a,c)=>([…a,…c]),[]))
.减少((会计科目,当前)=>{
当前汇率((行,ri)=>{
常量单元格=acc[ri]| |[];
单元格。推(行);
acc[ri]=细胞;
});
返回acc;
}, []);
console.log(分块)代码>或者,如果要执行脚本路径,则需要两个实用程序:
将单元格值数组拆分为大小为3
的块(以获得所需的行数)
将单元格值从给定的块转换到3
行
请参阅下面的代码段以了解有效的实现:
/**
*@typedef{object}ChunkifyConfig
*@property{number}[size]
*@property{number[]}[限制]
*
*@summary将数组拆分为块
*@param{any[]}源
*@param{ChunkifyConfig}
*@返回{any[][]}
*/
const chunkify=(源,{limits=[],size}={})=>{
常量输出=[];
如果(尺寸){
常量{length}=源;
const maxNumChunks=Math.ceil((长度| | 1)/size);
设numchunkslft=maxmchunks;
while(numchunkslight){
const chunksProcessed=maxNumChunks-numChunksLeft;
常量elemsProcessed=chunksProcessed*大小;
output.push(source.slice(elemsProcessed,elemsProcessed+size));
Numchunksleet--;
}
返回输出;
}
常数{length}=极限;
如果(!长度){
返回[Object.assign([],source)];
}
设lastSlicedElem=0;
限制。forEach((限制,i)=>{
const limitPosition=最后一个slicedelem+限制;
输出[i]=source.slice(lastSlicedElem,limitPosition);
lastSlicedElem=限制位置;
});
const lastChunk=source.slice(lastSlicedElem);
lastChunk.length&&output.push(lastChunk);
返回输出;
};
常数测试=[
[“红色”]、[“蓝色”]、[“黄色”]、[“绿色”]、[“粉色”]、[“橙色”]、[“品红”]、[“棕色”]、[“黑色”]
];
const chunked=chunkify(测试,{size:3})
.map(chunk=>chunk.reduce((a,c)=>([…a,…c]),[]))
.减少((会计科目,当前)=>{
当前汇率((行,ri)=>{
常量单元格=acc[ri]| |[];
单元格。推(行);
acc[ri]=细胞;
});
返回acc;
}, []);
console.log(分块)代码>欢迎访问。请按照中的建议添加您的搜索/研究工作的简要说明。它不需要脚本,只需要一个相当简单的公式。设置一个示例表(不是图片)并在您的帖子中共享,确保将共享权限设置为“任何具有链接的人都可以编辑”。然后我或此处的其他人可以与您共享建议。欢迎访问。请按照中的建议添加您的搜索/研究工作的简要说明。它不需要脚本,只需要一个相当简单的公式。设置一个样本表(而不是图片)并在您的帖子中共享,确保按照
2 3 4
5 6 7
8 9 10
2 5 8
3 6 9
4 7 10
Red Green Magenta
Blue Pink Brown
Yellow Orange Black