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

如何将openpyxl的DocumentProperties转换为DataFrame、字典或字符串?

处理openpyxl DocumentProperties对象的实用方法

1. 把对象转成字典

openpyxl的DocumentProperties对象包含文档元数据(作者、最后修改者、创建时间等),可以通过过滤私有属性(带下划线_)转成字典,写个简单函数即可:

def props_to_dict(document_props):
    # 提取非私有、非方法的属性键值对
    return {
        key: value
        for key, value in document_props.__dict__.items()
        if not key.startswith('_') and not callable(value)
    }

调用示例:

from openpyxl import load_workbook

wb = load_workbook("excel_file.xlsx", read_only=True)  # 只读模式更高效
props_dict = props_to_dict(wb.properties)

props_dict里会包含author、lastModifiedBy、created、modified等常用字段。

2. 保存为变量

直接赋值就能把元数据存为变量,两种形式都可以:

# 保存原DocumentProperties对象
saved_props = wb.properties
# 保存字典形式的元数据
saved_props_dict = props_dict

3. 转换为DataFrame

如果要批量处理目录下的Excel文件,先把每个文件的属性字典存进列表,再转成DataFrame:

import pandas as pd
import os

props_list = []
# 遍历目录及子目录
for root, _, files in os.walk("./your_excel_dir"):
    for file in files:
        if file.endswith((".xlsx", ".xlsm")):
            file_path = os.path.join(root, file)
            wb = load_workbook(file_path, read_only=True)
            props_dict = props_to_dict(wb.properties)
            props_dict["file_path"] = file_path  # 追加文件路径方便溯源
            props_list.append(props_dict)
            wb.close()  # 只读模式记得关闭

# 转成DataFrame
df = pd.DataFrame(props_list)
# 可直接保存为CSV
df.to_csv("excel_metadata.csv", index=False, encoding="utf-8-sig")

4. 整体存储元数据

方法一:用pickle存储原对象

你之前的pickle用法有误,正确操作是用pickle模块来序列化对象,而非调用对象的pickle.dump():

import pickle

# 保存原DocumentProperties对象
with open("excel_props.pkl", "wb") as f:
    pickle.dump(wb.properties, f)

# 读取还原对象
with open("excel_props.pkl", "rb") as f:
    loaded_props = pickle.load(f)
# 读取后仍可调用属性,比如 loaded_props.lastModifiedBy

方法二:存为JSON(跨语言通用)

由于DocumentProperties里的created、modified是datetime对象,JSON无法直接序列化,需先转成字符串:

import json
from datetime import datetime

def serialize_datetime(obj):
    if isinstance(obj, datetime):
        return obj.strftime("%Y-%m-%d %H:%M:%S")
    raise TypeError(f"Type {type(obj)} not serializable")

# 把字典转成JSON字符串
props_json = json.dumps(props_dict, default=serialize_datetime, ensure_ascii=False)

# 保存到文件
with open("excel_props.json", "w", encoding="utf-8") as f:
    f.write(props_json)

# 读取JSON并还原字典
with open("excel_props.json", "r", encoding="utf-8") as f:
    loaded_dict = json.load(f)
# 如需转回datetime,可使用 datetime.strptime(loaded_dict["created"], "%Y-%m-%d %H:%M:%S")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:27:28