使用Selenium和openpyxl将HTML表格写入Excel的格式问题
解决HTML表格转Excel的矩阵格式问题
你的核心问题是行号计算逻辑错误,导致表格无法按矩阵形式写入Excel,以下是具体分析和修复方案:
原代码问题分析
原代码中使用1+sheet.max_row作为行号:
sheet.cell(row = 1+sheet.max_row, column= 1+cells.index(cell)).value = cell.text
每次写入一个单元格后,sheet.max_row会自动递增,导致同一HTML行的每个单元格都被写入Excel的新行,最终所有单元格呈纵向排列,而非矩阵。
你修改后的问题分析
改成row=1+cells.index(cell)后,行号和列号绑定了单元格在当前行的索引:
sheet.cell(row=1+cells.index(cell),column = 1+cells.index(cell)).value = cell.text
这会导致同一HTML行的第n个单元格被写入Excel的第n行第n列,不仅格式混乱,后续行的单元格还会覆盖之前行的同位置数据,最终只剩最后一条记录。
正确修复方案
遍历HTML行时,用enumerate记录当前行的索引(Excel行号从1开始);遍历单元格时,同样用enumerate记录当前列的索引,确保每个单元格写入对应的行列位置:
# Creates new WB & names the active sheet wb = Workbook() sheet = wb.active sheet.title = "Escalation Table" # Finds the escalation table, then iterates through & writes it to the Active Excel Sheet esc_table = driver.find_element(By.XPATH,"/html/body/table[2]/tbody/tr[5]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody") # 遍历行,row_idx从1开始对应Excel行号 for row_idx, row in enumerate(esc_table.find_elements(By.TAG_NAME,"tr"), start=1): cells = row.find_elements(By.TAG_NAME,"td") # 遍历当前行的单元格,col_idx从1开始对应Excel列号 for col_idx, cell in enumerate(cells, start=1): sheet.cell(row=row_idx, column=col_idx).value = cell.text
关键说明
- 使用
enumerate(..., start=1)直接生成从1开始的索引,完美匹配Excel的行列编号规则。 - 同一HTML行的所有单元格共用同一个
row_idx,保证横向排列;不同单元格用col_idx区分列位置,形成规整矩阵。
内容的提问来源于stack exchange,提问作者HelpPls1
相关产品推荐
相关产品推荐

