无需脚本实现含零件任务的表格数据提取与重排(排除空白行)
不用脚本也能实现!这里有两种实用方法
首先明确你的需求:把多列存储零件信息的Tasks表格,转换成每行对应一个零件的Parts Required格式,同时剔除没有零件的任务(比如「Clean Engine」),完全可以用电子表格工具的内置功能搞定,不用写任何脚本。
先把你的原始表格和目标表格整理清楚:
原始Tasks表格
| Task | Part 1 | Quantity 1 | Part 2 | Quantity 2 |
|---|---|---|---|---|
| Oil Change | Oil | 10 | Oil Filter | 1 |
| Clean Engine | ||||
| Impeller Change | Impeller | 1 |
目标Parts Required表格
| Task | Part | Quantity |
|---|---|---|
| Oil Change | Oil | 10 |
| Oil Change | Oil Filter | 1 |
| Impeller Change | Impeller | 1 |
方法1:用Power Query(适合批量处理,Excel/Google Sheets通用)
这是最省心的方案,适合数据量较大或者以后需要重复操作的场景:
- 选中
Tasks表格的所有数据,在Excel里点击「数据」→「从表格/区域」;在Google Sheets里点击「数据」→「数据连接器」→「表格」,导入到Power Query编辑器 - 在编辑器中选中
Task列,点击「转换」选项卡的「逆透视列」→「逆透视列对」 - 在弹出窗口中添加两对列:第一对选
Part 1和Quantity 1,第二对选Part 2和Quantity 2,点击确定 - 此时会生成
Part和Quantity列,点击Part列的筛选按钮,去掉空值选项 - 最后点击「关闭并上载」(Excel)或者「加载到表格」(Google Sheets),就能得到和目标格式完全一致的表格
方法2:用公式手动处理(适合小规模数据)
如果数据量不大,用公式下拉填充也能快速完成:
假设你的Tasks表格在名为Tasks的工作表里,数据从A1开始,在新工作表构建目标表格:
- Task列(A2单元格):
=INDEX(Tasks!$A$2:$A$4, INT((ROW(A2)-2)/2)+1) - Part列(B2单元格):
=IF(ISODD(ROW(A2)-1), INDEX(Tasks!$B$2:$B$4, INT((ROW(A2)-2)/2)+1), INDEX(Tasks!$D$2:$D$4, INT((ROW(A2)-2)/2)+1)) - Quantity列(C2单元格):
=IF(ISODD(ROW(A2)-1), INDEX(Tasks!$C$2:$C$4, INT((ROW(A2)-2)/2)+1), INDEX(Tasks!$E$2:$E$4, INT((ROW(A2)-2)/2)+1))
把三个公式下拉填充到足够多的行,再筛选掉Part列为空的行,就能得到你需要的结果。
内容的提问来源于stack exchange,提问作者kieranhood




