摘要
一老大哥处理 excel 搞不过来了,领导又着急要。所以就来找我帮忙了。幸不辱使命,我很快便搞了出来,简单记录一下。
正文
一、实战
需求如下:
有个 excel,1000 行左右,现在需要让他变成 5000行,每 1 行数据变成相同的 5 行。
我现在是新入职公司,有个带我的大哥。这大哥的领导着急要这个 excel,他让 ai 来处理,使用的也是时下最热门的 claude opus 4.8 模型。ai 分为三步走
- 读取 excel
- 编写 python 脚本,处理数据
- 编写验证脚本,验证数据
这一套流程下来,几分钟根本搞不完。所以大哥就来问我了,既然大哥有命,我这当小弟的也应该尽份力。
excel 本身很强大,直接使用内置的公式功能。分为如下几步
- 将原 Sheet1 复制出来命名为 Tmp
- 在 Tmp 中,找 A1 作为起始单元格,编写公式
=INDEX(sheet1!A:A, INT((ROW()-1)/4)+1),然后向右拉取想要复制的列数、向下拉取想要复制的行数 - 新建另一个名为 Result 的 sheet,选中 Tmp 中所有的数据,以值的格式粘贴
最后成果如图

秒秒钟解决,大哥欠了我一个人情。
后面对我的态度也转变了不少。以前我刚来时,问问题,他都有点爱答不理,现在次次秒回!人情社会啊
二、公式原理
text
| |
用法:输入后向右拖到需要的列数,再向下拖到足够行数,即可将 Sheet1 的数据以每4行为单位展开。
2.1 核心函数
INDEX(array, row_num):从指定数组中返回第 row_num 行的值。
ROW():返回当前单元格所在的行号,第 1 行返回 1,第 5 行返回 5。
INT(number):向下取整,去掉小数部分,INT(1.9) = 1。
跨表引用语法:
=Sheet1!A1:C10:选中 Sheet1 的 A1 到 C10 区域,从左上到右下=Sheet1!A:C:选中 Sheet1 的 A 到 C 的区域,从左上到右下,即 A、B、C 三整列=Sheet1!A:A:选中 Sheet1 的整个 A 列。
2.1 原理推导
关键在于构造这个映射:INT((ROW()-1)/4)+1
| 当前行 ROW() | (ROW()-1)/4 | INT(...) | 引用的原始行 |
|---|---|---|---|
| 1 | 0/4 = 0.00 | 0 | 1 |
| 2 | 1/4 = 0.25 | 0 | 1 |
| 3 | 2/4 = 0.50 | 0 | 1 |
| 4 | 3/4 = 0.75 | 0 | 1 |
| 5 | 4/4 = 1.00 | 1 | 2 |
| 6 | 5/4 = 1.25 | 1 | 2 |
| 7 | 6/4 = 1.50 | 1 | 2 |
| 8 | 7/4 = 1.75 | 1 | 2 |
| 9 | 8/4 = 2.00 | 2 | 3 |
直观理解
普通 ROW() 每行 +1,这个公式每 4 行才 +1,就像一个"慢速计数器",实现数据的重复展开。
改变重复次数,只需替换数字 4:
text
| |
