Google Sheets:如何用Query或ArrayFormula转置重构表格?
Google Sheets Query 表格重构解决方案
针对你需要重构表格的需求,结合示例表格的结构,这里提供通用的Query+辅助函数解决方案,帮你快速重塑数据结构:
宽表转窄表(原始格式转纵向条目)
如果原始数据是宽表(每行是一条完整记录,多列对应属性),要转成窄表(每行是单个属性条目),使用以下公式:
=QUERY( {FLATTEN(Sheet1!A2:A&"|"&Sheet1!B1:D1), FLATTEN(Sheet1!B2:D)}, "SELECT SPLIT(Col1, '|')[0], SPLIT(Col1, '|')[1], Col2 WHERE Col2 <> '' ORDER BY 1", 0 )
公式拆解:
FLATTEN(Sheet1!A2:A&"|"&Sheet1!B1:D1):将每行主键(比如A列的日期/ID)与表头拼接后平铺成单列,用来关联属性名和对应记录FLATTEN(Sheet1!B2:D):把所有属性值平铺成单列,和上方关联列一一对应QUERY语句:SPLIT(Col1, '|'):拆分拼接字符串,提取原始主键和属性名WHERE Col2 <> '':过滤空值行ORDER BY 1:按主键排序
窄表转宽表(聚合为结构化记录)
如果要反向将窄表转为宽表,用PIVOT实现:
=QUERY( Sheet2!A:C, "SELECT A, MAX(C) WHERE A <> '' GROUP BY A PIVOT B", 1 )
公式说明:
GROUP BY A:按主键分组聚合PIVOT B:将属性名转换为表头MAX(C):提取每个属性对应的唯一值(若存在重复值,可替换为COUNT/SUM等聚合函数)
适配你的示例表格
根据你提供的示例表格结构,修改公式中的单元格范围(比如把Sheet1!A2:A替换为实际原始数据范围)即可。如果目标格式有特殊要求,调整Query逻辑:
- 筛选特定数据:在
WHERE后追加条件,比如WHERE SPLIT(Col1, '|')[1] = '任务状态' - 调整排序规则:修改
ORDER BY后的列序号或字段 - 保留表头:将公式最后一个参数
0改为1(若原始数据包含表头)
内容的提问来源于stack exchange,提问作者Michael Petroules
相关产品推荐
相关产品推荐

