在Excel文件归档和企业文档管理场景中,统一设置文件的作者、部门、版本号等元数据信息,有助于后续检索和分类。如果文件数量庞大,逐个在属性面板里填写显然低效。利用Python编程方式操作Excel文档属性,可以让这一过程自动化,保证元数据的一致性和完整性。
本文使用的Python库是Spire.XLS for Python,它提供了DocumentProperties和CustomDocumentProperties两个集合,分别用于管理Excel预定义的内置属性和用户自定义属性。安装命令如下:
安装完成后,在脚本中导入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配置文档属性,既能方便地设置作者、标题、公司等基础信息,也能灵活扩展布尔、数值、文本和日期等自定义业务元数据。配合文件系统遍历,可以轻松实现批量自动化写入。合理设计属性命名规范,对后续文档归档、数据资产分类和自动化检索都会有明显帮助。 |