在xlwings/pandas中按标题名称标记Excel列

ilmyapht  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(109)

有没有一种方法可以在任何python webscraping工具中通过标题名称来标记Excel列?
例如,A列是零食,B列是饮料,C列是水果:


的数据
在Python中,如果我想把葡萄添加到水果表中,我可以这样做:

wb.sheets['foods'].range('C5').value = "grapes"

字符串
然而,如果我在饮料和水果之间添加一个新的列,称为“蔬菜”,那么水果将在D列。



现在,如果我使用与之前相同的代码将葡萄添加到水果表中,它会将其放在蔬菜部分:

wb.sheets['foods'].range('C5').value = "grapes"


因此,我不得不修改代码,使它变成这样:

wb.sheets['foods'].range('D5').value = "grapes"


有没有一种方法让python知道哪个列是哪个列,这样当我在中间添加列时,我就不必不断修改代码了?

1yjd4xko

1yjd4xko1#

代码是否可以定位“drugs”的头单元格?

是的,有几种可能。最简单的方法之一就是使用named ranges。只需在单元格上创建一个命名的范围 “drugs”,在其中放置字符串 “drugs”。然后使用"drinks"代替地址,以获得具有"drinks"的范围。插入新列时,命名区域的地址将自动调整。使用get_address获取范围的实际地址。使用end和offset方法定位要添加新项的位置:

headers = '''
   snacks
   drinks
   fruits
'''.strip().split()

ws = wb.sheets['foods']
for cell, header in zip(ws['1:1'], headers):
    cell.value = header
    cell.name = header    # be careful with spaces

data = '''
    chips,milk,apple
    fries,juice,orange
    candy,tea,banana
'''.strip().split()
data = [x.split(',') for x in data]
ws['A2'] = data

print(f'{ws['drinks'].get_address()=}')
ws['A:A'].insert()
print(f'{ws['drinks'].get_address()=}')

# add a new item to drinks
ws['drinks'].end('down').offset(1, 0).value = 'coffee'

字符串

相关问题