gpt4 book ai didi

python - 如何在 openpyxl 中使用字段名或列标题?

转载 作者:太空狗 更新时间:2023-10-29 21:45:48 24 4
gpt4 key购买 nike

请参阅下面的代码。这段代码运行良好,但我想做两件事。例如,我做了一件事 if 语句 with or 比实际的要短得多。我有很多这样的专栏,不是都挨着的。我希望它更短。另外,有时我可能不知道确切的列字母。

所以我想知道是否有办法知道列名或标题。就像最顶行的值一样。因此,我可以测试它是否是那些始终在该单元格上执行函数的值之一(如果它位于指定列中)。我找不到 openpyxl 函数来做列名。不确定它是否理解第一行与其余行不同。我想也许如果不行我可以尝试在第一行做测试,但不知道怎么做。

那么有没有办法调用列名呢?或者如果无法调用列名进行测试,有人可以帮我检查第一行以查看它是否有值(value)吗?然后在我所在的正确行上进行更改?这是否有意义。

所以不是代码说:

if cellObj.column == 'H' or ...

它会说:

if cellObj.column_header == 'NameOfField or ...

或者如果做不到,那么:

if this cell has column where first row value is 'NameOfField' ...

请帮助最好的方法来做到这一点。我查看了 stackoverflow 以及书籍和博客网站,但似乎不是调用列名称(不是列字母)的方法。

for row in sheet.iter_rows():
for cellObj in row:
if cellObj.column == 'H' or cellObj.column == 'I' or cellObj.column == 'L' or cellObj.column == 'M':
print(cellObj.value),
if cellObj.value.upper() == 'OldValue1':
cellObj.value = 1
print(cellObj.value)
elif cellObj.value.upper() == 'OldValue2':
cellObj.value = 2
print(cellObj.value)

最佳答案

编辑

假设这些是您要查找的 header 名称:

colnames = ['Header1', 'Header2', 'Header3']

查找这些列的索引:

col_indices = {n for n, cell in enumerate(sheet.rows[0]) if cell.value in colnames}

现在迭代剩余的行:

for row in sheet.rows[1:]:
for index, cell in enumerate(row):
if index in col_indices:
if cell.value.upper() == 'OldValue1':
cell.value = 1
print(cell.value)
elif cell.value.upper() == 'OldValue2':
cell.value = 2
print(cell.value)

使用字典而不是集合来保留列名:

col_indices = {n: cell.value for n, cell in enumerate(sheet.rows[0]) 
if cell.value in colnames}

for row in sheet.rows[1:]:
for index, cell in enumerate(row):
if index in col_indices:
print('col: {}, row: {}, content: {}'.format(
col_indices[index], index, cell.value))
if cell.value.upper() == 'OldValue1':
cell.value = 1
elif cell.value.upper() == 'OldValue2':
cell.value = 2

旧答案

这会使您的 if 语句更短:

if cellObj.column in 'HILM':
print(cellObj.value),

对于多字母列坐标,您需要使用列表:

if cellObj.column in ['H', 'AA', 'AB', 'AD']:
print(cellObj.value),

关于python - 如何在 openpyxl 中使用字段名或列标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34296132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com