You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用函数或脚本拆分Google Sheets多行数据以搭建日期仪表盘?

Google Sheet多行混合数据拆分方案

针对你表格中B/C列、D/E列存在多种多行组合的场景,提供两种最优解决方案,适配你的100行样本数据,方便后续基于B、D列日期搭建仪表盘:

一、函数方案(无需代码,直接使用)

适合非技术用户,利用Google Sheet内置函数实现自动拆分,公式可直接复制到空白单元格(比如F1):

=ARRAYFORMULA(
  LET(
    data, A1:E100,
    colA, INDEX(data,,1),
    colB, INDEX(data,,2),
    colC, INDEX(data,,3),
    colD, INDEX(data,,4),
    colE, INDEX(data,,5),
    splitB, SPLIT(colB, CHAR(10)),
    splitC, SPLIT(colC, CHAR(10)),
    splitD, SPLIT(colD, CHAR(10)),
    splitE, SPLIT(colE, CHAR(10)),
    maxRows, BYROW(data, LAMBDA(r, MAX(COUNTA(SPLIT(INDEX(r,2),CHAR(10))), COUNTA(SPLIT(INDEX(r,4),CHAR(10)))))),
    seq, SEQUENCE(MAX(maxRows)),
    expandA, BYROW(seq, LAMBDA(s, IFERROR(INDEX(colA, MATCH(TRUE, maxRows>=s, 0)), ""))),
    expandB, BYROW(seq, LAMBDA(s, IFERROR(INDEX(splitB, MATCH(TRUE, maxRows>=s, 0), s), ""))),
    expandC, BYROW(seq, LAMBDA(s, IFERROR(INDEX(splitC, MATCH(TRUE, maxRows>=s, 0), s), ""))),
    expandD, BYROW(seq, LAMBDA(s, IFERROR(INDEX(splitD, MATCH(TRUE, maxRows>=s, 0), s), ""))),
    expandE, BYROW(seq, LAMBDA(s, IFERROR(INDEX(splitE, MATCH(TRUE, maxRows>=s, 0), s), ""))),
    result, FILTER({expandA, expandB, expandC, expandD, expandE}, expandA<>""),
    result
  )
)

逻辑说明

  1. 用CHAR(10)识别单元格内的换行符,拆分B/C/D/E列的多行内容
  2. 计算每行需要扩展的最大行数(取B列、D列拆分行数的最大值,保证日期对应)
  3. 按序列扩展每一列,自动填充不足长度的单元格内容
  4. 过滤空行,输出完整的单行化数据

二、脚本方案(可重复操作,适合批量场景)

如果需要频繁执行拆分操作,或后续数据量增长,可使用Google Apps Script实现一键拆分:

步骤1:添加脚本

打开你的Google Sheet,点击「扩展程序」→「Apps 脚本」,粘贴以下代码:

function splitMultiRowData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const result = [];
  
  data.forEach(row => {
    const [colA, colB, colC, colD, colE] = row;
    const splitB = colB ? colB.split('\n') : [''];
    const splitC = colC ? colC.split('\n') : [''];
    const splitD = colD ? colD.split('\n') : [''];
    const splitE = colE ? colE.split('\n') : [''];
    
    const maxLength = Math.max(splitB.length, splitD.length);
    
    for (let i = 0; i < maxLength; i++) {
      const newRow = [
        colA,
        splitB[i] || splitB.at(-1),
        splitC[i] || splitC.at(-1),
        splitD[i] || splitD.at(-1),
        splitE[i] || splitE.at(-1)
      ];
      result.push(newRow);
    }
  });
  
  // 清除F-J列原有内容,写入拆分结果
  sheet.getRange(1, 6, sheet.getLastRow(), 5).clearContent();
  sheet.getRange(1, 6, result.length, 5).setValues(result);
}

// 添加自定义菜单
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('数据工具')
    .addItem('拆分多行数据', 'splitMultiRowData')
    .addToUi();
}

步骤2:使用方法

保存脚本后刷新表格,顶部会出现「数据工具」菜单,点击「拆分多行数据」即可完成拆分,结果会自动写入F-J列。

逻辑说明

  • 遍历每一行数据,拆分各列的换行内容
  • 按B/D列的最大行数循环,不足长度的列用最后一个值填充(保证日期与对应内容匹配)
  • 自动清理目标区域并写入结果,操作便捷

内容的提问来源于stack exchange,提问作者Dave Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:15:36