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

如何在Google Sheets中实现表格逆透视(Unpivot)?求Apps Script/Query方案

解决方法

方法一:使用Google Sheets Query函数

假设你的源数据在A1:D区域(A列为名称,B/C/D为独立属性列),可以用数组拼接+Query的方式直接转换:

=QUERY({
  A2:A, "属性1", B2:B;
  A2:A, "属性2", C2:C;
  A2:A, "属性3", D2:D
}, "select Col1, Col2, Col3 where Col3 is not null", 0)

原理说明:

  • 用{}将三部分数据拼接:每部分都是「名称列 + 属性类型标识 + 对应属性列」
  • 通过Query过滤掉属性值为空的行,最后输出整理后的结构

方法二:使用Google Apps Script

如果需要更灵活的处理(比如动态适配列数、自动更新),可以用脚本实现:

function transformTable() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName("原表"); // 替换为你的源工作表名称
  const targetSheet = ss.getSheetByName("目标表"); // 替换为你的目标工作表名称
  
  const sourceData = sourceSheet.getDataRange().getValues();
  const resultData = [["名称", "属性类型", "属性值"]]; // 目标表头,按需修改
  
  // 遍历源数据行(跳过表头行)
  for (let i = 1; i < sourceData.length; i++) {
    const row = sourceData[i];
    const name = row[0];
    // 定义属性类型与对应列的映射,可根据实际列数扩展
    const attrMap = [
      ["属性1", row[1]],
      ["属性2", row[2]],
      ["属性3", row[3]]
    ];
    
    // 逐个处理属性,跳过空值
    attrMap.forEach(([type, value]) => {
      if (value !== "") {
        resultData.push([name, type, value]);
      }
    });
  }
  
  // 写入目标表
  targetSheet.clearContents();
  targetSheet.getRange(1, 1, resultData.length, resultData[0].length).setValues(resultData);
}

使用步骤:

  1. 打开你的Google表格,点击「扩展程序」→「Apps脚本」
  2. 粘贴上述代码,修改sourceSheet和targetSheet的名称为你的实际工作表名
  3. 保存并运行脚本,授权后即可完成转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:12:32