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

Pandas能否检测Excel中的粗体、斜体、下划线等格式?

Pandas检测Excel字体格式(粗体/斜体/下划线)的实现方式

Pandas本身不支持直接读取Excel单元格的字体格式属性(比如粗体、斜体、下划线),因为它的核心是处理表格数据,而非格式信息。要实现这个需求,需要配合专门的Excel文件处理库(如openpyxl或xlrd)来提取格式信息,再与Pandas的DataFrame关联。

方法1:使用openpyxl(推荐,支持.xlsx格式)

openpyxl是处理现代Excel格式(.xlsx)的常用库,可以直接访问单元格的字体格式属性。以下是具体实现步骤:

  1. 安装依赖:
pip install openpyxl pandas
  1. 提取格式信息并关联到DataFrame:
import openpyxl
import pandas as pd

# 用openpyxl加载Excel文件,读取格式信息
wb = openpyxl.load_workbook("your_file.xlsx", data_only=True)
ws = wb.active

# 存储格式信息的字典,键为单元格坐标,值为格式状态
format_info = {}
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
    for cell in row:
        font = cell.font
        format_info[cell.coordinate] = {
            "is_bold": font.bold,
            "is_italic": font.italic,
            "has_underline": font.underline != "none"
        }

# 用Pandas读取原始数据
df = pd.read_excel("your_file.xlsx")

# 将格式信息映射到DataFrame的新增列
format_df = pd.DataFrame.from_dict(format_info, orient="index").reset_index()
format_df["row"] = format_df["index"].apply(lambda x: openpyxl.utils.cell.coordinate_to_tuple(x)[0])
format_df["col"] = format_df["index"].apply(lambda x: openpyxl.utils.cell.coordinate_to_tuple(x)[1])

# 合并到原始DataFrame(假设原始数据从第2行开始,对应row=2)
df = df.merge(
    format_df.drop(columns=["index"]),
    left_index=True,
    right_on=lambda x: x["row"] - 2,
    how="left"
).drop(columns=["row", "col"])

这段代码会给你的原始DataFrame新增is_bold、is_italic、has_underline三列,标记每个单元格是否对应格式。

方法2:使用xlrd(仅支持.xls格式)

如果你的文件是旧版Excel(.xls),可以用xlrd,但注意xlrd 2.0及以上版本不再支持.xlsx格式:

pip install xlrd==1.2.0 pandas

提取格式的核心代码示例:

import xlrd
import pandas as pd

wb = xlrd.open_workbook("your_file.xls", formatting_info=True)
ws = wb.sheet_by_index(0)

format_info = {}
for row_idx in range(1, ws.nrows):
    for col_idx in range(ws.ncols):
        cell = ws.cell(row_idx, col_idx)
        xf_idx = cell.xf_index
        font = wb.font_list[wb.xf_list[xf_idx].font_index]
        format_info[(row_idx+1, col_idx+1)] = {  # 转换为Excel的1-based坐标
            "is_bold": font.bold,
            "is_italic": font.italic,
            "has_underline": font.underline_type != 0
        }

# 后续关联DataFrame的逻辑和openpyxl版本类似,这里省略

注意事项

  • 如果需要后续将带有格式标记的数据写入新的工作簿,同样需要用openpyxl作为Pandas的写入引擎,才能保留或设置格式。
  • 格式检测是基于单个单元格的,所以需要确保原始DataFrame的行、列与Excel文件的单元格坐标正确对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:26