如何用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
相关产品推荐
相关产品推荐

