我的查询是关于一个函数,它是正在开发的解析脚本的一部分.我正在尝试编写一个python函数来查找与excel中匹配值对应的列号. excel已经使用openpyxl动态创建,并且它具有第一行(从第3列)标题,每个标题将4个列合并为一个.在我的后续函数中,我正在解析一些要添加到与匹配头相对应的列的内容. (附加信息:我正在解析的内容是爆炸输出.我正在尝试创建一个摘要电子表格,每个列中的命中名称包含命中,间隙,跨度和标识的子列.前两列是查询重叠群及其长度. )
我最初为xlrd编写了一个类似的函数,它起作用了.但是当我尝试为openpyxl重写它时,我发现max_row和max_col函数错误地返回了比实际存在的更多的行和列.例如,我有20行用于此导频输入,但它报告为82.
请注意,我手动选择了空行&列,并右键单击并删除它们,如本论坛其他地方所建议的那样.这并没有改变错误.
def find_column_number(x):
col = 0
print "maxrow = ", hrsh.max_row
print "maxcol = ", hrsh.max_column
for rowz in range(hrsh.max_row):
print "now the row is ", rowz
if(rowz > 0):
pass
for colz in range(hrsh.max_column):
print "now the column is ", colz
name = (hrsh.cell(row=rowz,column=colz).value)
if(name == x):
col = colz
return col
这里讨论了max_row和max_col的问题https://bitbucket.org/openpyxl/openpyxl/issues/514/cell-max_row-reports-higher-than-actual我在这里应用了这个建议.但是max_row仍然是错误的.
for row in reversed(hrsh.rows):
values = [cell.value for cell in row]
if any(values):
print("last row with data is {0}".format(row[0].row))
maxrow = row[0].row
然后我在https://www.reddit.com/r/learnpython/comments/3prmun/openpyxl_loop_through_and_find_value_of_the/尝试了这个建议,并尝试获取列值.一次,脚本再次考虑空列并报告比实际存在的列数更多的列.
for currentRow in hrsh.rows:
for currentCell in currentRow:
print(currentCell.value)
你能帮我解决这个错误,或者提出另一种方法来实现我的目标吗?
解决方法:
正如错误报告中所述,您链接到工作表报告的维度与这些维度是否包含空行或列之间存在差异.如果max_row和max_column没有报告您想要查看的内容,那么您需要编写自己的代码以找到第一个完全空的代码.当然,最有效的方法是从max_row开始并向后工作,但以下内容可能就足够了:
for max_row, row in enumerate(ws, 1):
if all(c.value is None for c in row):
break