Python处理Excel:C3列按C1、C2范围随机化仅最后行生效问题
解决Excel C3列批量随机化问题
你的代码存在三个关键问题,导致只有最后一行被修改:
- 行和列索引顺序错误:xlrd的
cell_value(rowx, colx)参数是先写行号,再写列号,你之前把行列顺序搞反了,根本没取到当前行的C1、C2值。 - 循环逻辑混乱:没必要嵌套遍历列,而且写入操作放在了循环外部,只执行了一次,自然只修改了最后一行。
- 变量命名冲突:用
random作为变量名,覆盖了导入的random模块,会导致后续调用报错。
修正后的代码如下:
import xlrd from xlutils.copy import copy import random book = xlrd.open_workbook('temp.xlsx') sheet = book.sheet_by_index(0) nbook = copy(book) nsheet = nbook.get_sheet(0) # 遍历每一行(如果有表头,改成range(1, sheet.nrows)跳过表头) for i in range(sheet.nrows): # 获取当前行C1(列索引1)和C2(列索引2)的值 min_val = sheet.cell_value(i, 1) max_val = sheet.cell_value(i, 2) # 生成范围内的随机整数(浮点数用random.uniform) random_num = random.randint(int(min_val), int(max_val)) # 写入当前行的C3列(列索引3) nsheet.write(i, 3, random_num) nbook.save('new_temp.xlsx')
补充说明:
- 如果C1、C2是浮点数,替换
random.randint为random.uniform(min_val, max_val),还可以用round()控制小数位数。 - 若表格有表头,记得调整循环起始行,避免修改表头数据。
内容的提问来源于stack exchange,提问作者user20195885
相关产品推荐
相关产品推荐

