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

如何向QTableWidget追加Excel数据且不覆盖原有列与内容

问题根因

现有代码覆盖原有内容的核心问题:

  • 直接调用setRowCount(df.shape[0])、setColumnCount(df.shape[1])会重置表格行列配置,直接清空所有已存数据和预设列头
  • 写入单元格时行索引从0开始计数,没有叠加表格原有行数的偏移量,就算不重置行号也会从第一行开始覆盖旧数据
修复后代码
def addExcel(self, excel_file_dir, worksheet_name):
    df = pd.read_excel(excel_file_dir, worksheet_name)
    if df.size == 0:
        return

    df.fillna('', inplace=True)
    # 读取当前表格已有的行数,作为新数据写入的起始位置
    start_row = self.tableWidget.rowCount()
    # 只新增需要的行,完全不改动原有列配置
    self.tableWidget.setRowCount(start_row + df.shape[0])

    # 逐行写入Excel数据,行号叠加起始偏移
    for df_row, values in df.iterrows():
        target_row = start_row + df_row
        for col_idx, value in enumerate(values):
            # Excel列数超过表格预设列数时自动跳过,避免索引越界
            if col_idx >= self.tableWidget.columnCount():
                break
            if isinstance(value, (float, int)):
                value = '{0:0,.0f}'.format(value)
            self.tableWidget.setItem(target_row, col_idx, QTableWidgetItem(str(value)))
补充说明
  • 上述代码完全保留你原有对数值类型的格式化逻辑,不会改变数字展示效果
  • 自动忽略超出表格原有列数的Excel内容,不会打乱你预先设置的列顺序、列宽、列头配置
  • 如果需要做Excel列和表格列的映射(比如Excel的「手机号」列对应表格第2列),只需调整col_idx的对应规则即可,不需要修改整体追加逻辑

代码运行后,所有原有数据、列配置都会完整保留,新导入的Excel数据会自动追加到表格最后一条已有数据的后方。

内容的提问来源于stack exchange,提问作者Les Jetskii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:30:17