Javascript 将单列拆分为多列每列1000行

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(

我有一个非常大的数据列,我想将其拆分为多个列,每个列包含1000行。我已经在互联网上搜寻任何可能的答案,但找不到解决办法。例子: 前列

我想将上面的列拆分为多个3行的列,使其类似于:

后列

我意识到像这样的事情需要一个脚本。有什么想法吗?我以前在Excel中做过,但没有在Google Sheets中做过。

试试这个:

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
  • SEQUENCE
    创建具有3列的数字序列数组
  • TRANSPOSE
    将其转换为一个从上到下计数的3行数组:
  • VLOOKUP
    使用人工创建的数组将人工创建的数字替换为其行值的已创建数组:
    {row(A2:a),A2:a}
  • SEQUENCE
    创建具有3列的数字序列数组
  • TRANSPOSE
    将其转换为一个从上到下计数的3行数组:
  • 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