脚本专家 发表于 3 天前

Python脚本批量设置Excel工作簿内置与自定义文档属性的实践方法

在Excel文件归档和企业文档管理场景中,统一设置文件的作者、部门、版本号等元数据信息,有助于后续检索和分类。如果文件数量庞大,逐个在属性面板里填写显然低效。利用Python编程方式操作Excel文档属性,可以让这一过程自动化,保证元数据的一致性和完整性。

本文使用的Python库是Spire.XLS for Python,它提供了DocumentProperties和CustomDocumentProperties两个集合,分别用于管理Excel预定义的内置属性和用户自定义属性。安装命令如下:


pip install Spire.XLS


安装完成后,在脚本中导入spire.xls模块即可开始使用。

内置文档属性是Excel规范中预定义的元数据字段,例如标题、作者、主题、关键字、类别、公司和备注等。这些字段在Windows文件属性页或者Office详细信息面板中都可以被系统直接读取。通过workbook.DocumentProperties对象的对应属性赋值,就可以写入这些信息。下面的示例加载了一个现有工作簿,并设置了内置属性:


from spire.xls import *
from spire.xls.common import *

inputFile = "/示例.xlsx"
outputFile = "/设置内置属性.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile)

workbook.DocumentProperties.Author = "陈文"
workbook.DocumentProperties.Title = "设置Excel文档属性"
workbook.DocumentProperties.Subject = "Python操作Excel文件"
workbook.DocumentProperties.Keywords = "Python, Excel, 文档属性, 示例"
workbook.DocumentProperties.Category = "处理 Excel 文件"
workbook.DocumentProperties.Company = "E-iceblue"
workbook.DocumentProperties.Comments = "文档属性是指描述和标识文档的各种信息。"

workbook.SaveToFile(outputFile, FileFormat.Version2016)
workbook.Dispose()


直接给Author、Title等字段赋值,保存后元数据就会写入文件。

除了内置属性,业务场景中通常还需要一些附加信息,例如内部编号、审核状态、最后修改时间等。这些自定义信息可以通过CustomDocumentProperties集合的Add方法添加。Add方法接收属性名和属性值,底层会根据值的类型自动推断并存储对应的数据类型。来看代码:


from spire.xls import *
from spire.xls.common import *

inputFile = "示例.xlsx"
outputFile = "Excel自定义属性.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile)

workbook.CustomDocumentProperties.Add("_MarkAsFinal", True)
workbook.CustomDocumentProperties.Add("编辑者", "E-iceblue")
workbook.CustomDocumentProperties.Add("电话号码", 81705109)
workbook.CustomDocumentProperties.Add("修订编号", 7.12)
workbook.CustomDocumentProperties.Add("修订日期", DateTime.get_Now())

workbook.SaveToFile(outputFile, FileFormat.Version2016)
workbook.Dispose()


上述代码展示了不同类型的自定义属性:True是布尔值,用于标记最终状态;"E-iceblue"是字符串;81705109是整数;7.12是浮点数;DateTime.get_Now()则是一个日期时间对象。开发者不需要显式声明属性类型,传入对应类型的变量即可。

如果需要对整个文件夹下的Excel文件批量设置文档属性,可以结合Python内置的os模块实现。下面的脚本会遍历指定目录下的所有.xlsx文件,统一写入公司名称和归档信息,并输出到新的文件夹:


import os
from spire.xls import *
from spire.xls.common import *

folder = "./Demos/Data/ExcelFiles"
output_folder = "./Demos/Data/Output"

if not os.path.exists(output_folder):
    os.makedirs(output_folder)

for filename in os.listdir(folder):
    if filename.endswith(".xlsx"):
      file_path = os.path.join(folder, filename)
      workbook = Workbook()
      workbook.LoadFromFile(file_path)

      workbook.DocumentProperties.Company = "财务部"
      workbook.CustomDocumentProperties.Add("归档年份", 2026)
      workbook.CustomDocumentProperties.Add("审核状态", "已通过")

      save_path = os.path.join(output_folder, filename)
      workbook.SaveToFile(save_path, FileFormat.Version2016)
      workbook.Dispose()
      print(f"已更新属性: {filename}")


这个脚本在每处理完一个文件后立刻调用Dispose释放内存,避免大量文件同时打开导致资源占用过高。

关于操作过程中可能遇到的问题,这里整理几个要点。

修改已经存在的内置属性时,直接对该属性重新赋值即可覆盖旧值。例如想换作者,用workbook.DocumentProperties.Author = "新作者"就行。对于自定义属性,如果再次调用Add("属性名", 新值),同名属性会被覆盖;也可以通过workbook.CustomDocumentProperties["属性名"].Value = 新值来显式修改。

添加的自定义属性在Excel中查看时,可以打开文件后依次点击“文件”->“信息”->“属性”->“高级属性”,在弹出的窗口中选择“自定义”选项卡,即可看到键值对及其数据类型和内容。

有些自定义属性名称前带有下划线,例如_MarkAsFinal。这是Microsoft Office的约定标记。当_MarkAsFinal为True时,Excel打开文件会在顶部提示“作者已将此文档标记为最终版本”,提醒用户防止误修改。

关于文件格式兼容性,使用Spire.XLS处理.xls和.xlsx都没有问题。保存时只需在SaveToFile方法中传入对应的FileFormat或ExcelVersion即可。

总的来说,通过Python为Excel配置文档属性,既能方便地设置作者、标题、公司等基础信息,也能灵活扩展布尔、数值、文本和日期等自定义业务元数据。配合文件系统遍历,可以轻松实现批量自动化写入。合理设计属性命名规范,对后续文档归档、数据资产分类和自动化检索都会有明显帮助。

热心网友7 发表于 3 天前

Re: Python脚本批量设置Excel工作簿内置与自定义文档属性的实践方法

感谢分享,正好最近需要批量整理一批Excel文件的元数据,之前用openpyxl只能改部分内置属性,自定义属性这块折腾了好久没搞定。你提到的Spire.XLS方案看起来方便很多,尤其是自定义属性按类型自动推断这点,省去了手动转类型的麻烦。 想请教一下:批量处理时如果目标文件里已经有同名的自定义属性,`Add` 方法会直接覆盖还是报错?还有这个库在商业项目里用的话,授权方面有什么需要注意的吗?

热心网友7 发表于 3 天前

Re: Python脚本批量设置Excel工作簿内置与自定义文档属性的实践方法

正好最近在整理一批Excel归档文件,手动改作者和公司属性太痛苦了,这个批量思路很实用。尤其是自定义属性那段,用Add方法自动推断类型,省了不少转换的麻烦。不过想请问一下,如果文件夹里有旧版.xls文件,代码里只判断了.xlsx,需要额外处理吗?另外Spire.XLS这个库在批量处理大量文件时内存占用怎么样?希望楼主多分享一些实际使用中的注意事项。

热心网友6 发表于 3 天前

Re: Python脚本批量设置Excel工作簿内置与自定义文档属性的实践方法

感谢分享,正好最近在处理文件归档的事,这教程很实用。有个小问题想请教下:批量处理时如果多个文件里已经有同名自定义属性,重复Add会不会报错?还是需要先判断存在再覆盖?另外这个库处理.xls老格式支持吗?
页: [1]
查看完整版本: Python脚本批量设置Excel工作簿内置与自定义文档属性的实践方法