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

如何用xlwings在Python循环中免手动列表遍历Excel行与列?

使用xlwings遍历Excel行与列的优化方案

一、无需手动写列表遍历行的方法

你之前手动罗列单元格地址的方式确实有点繁琐,xlwings提供了更简洁的范围遍历方案,完全不用手动写单元格地址列表。比如你要处理B6到B11这一列的连续行,可以这样写:

import xlwings as xw

filepath = 'file.xlsx'
wb = xw.Workbook(filepath)
sh = wb.sheets['Sheet1']  # 更规范的工作表获取方式

# 直接遍历B6到B11的单元格范围
for idx, cell in enumerate(sh.range('B6:B11')):
    cell.value = idx

要是你想通过行号动态确定范围(比如指定第6到11行、第2列也就是B列),也可以用行号循环:

start_row, end_row = 6, 11
col_num = 2  # B列对应的数字编号是2
for row in range(start_row, end_row + 1):
    sh.cells(row, col_num).value = row - start_row  # 赋值结果和你原代码完全一致

二、遍历列的方法

如果要遍历某一行的连续列(比如第6行的B到G列),同样可以用范围直接遍历:

# 遍历第6行的B6到G6单元格
for idx, cell in enumerate(sh.range('B6:G6')):
    cell.value = idx

或者通过列号动态控制范围:

start_col, end_col = 2, 7  # 对应B到G列
row_num = 6
for col in range(start_col, end_col + 1):
    sh.cells(row_num, col).value = col - start_col

另外,xlwings还支持直接给整个范围赋值列表,不用写循环,效率更高:

# 一次性给B6:B11赋值[0,1,2,3,4,5]
sh.range('B6:B11').value = list(range(6))

# 一次性给B6:G6赋值[0,1,2,3,4,5]
sh.range('B6:G6').value = list(range(6))

针对你已实现的范围编辑优化

你补充的代码里有列表l = [8,7,6,5,4,3,2,1],如果要把这个列表的值写入行或列,直接赋值更高效:

import xlwings as xw

filepath = 'file.xlsx'
wb = xw.Workbook(filepath)
sh = wb.sheets['Sheet1']

l = [8,7,6,5,4,3,2,1]
# 写入到B2到B9(纵向排列,需要转置)
sh.range('B2').options(transpose=True).value = l
# 写入到第2行的B到I列(横向排列)
sh.range('B2').value = l

内容的提问来源于stack exchange,提问作者Artur Müller Romanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:42