You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:28:22