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

如何优化批量给文件夹内Excel文件添加Sensitivity Label的代码?

优化Excel敏感度标签批量添加方案

一、后台隐藏运行Excel(减少可视化资源占用)

当前代码的核心问题是每次打开Excel都会显示窗口,占用大量系统资源。可以通过xlwings启动不可见的Excel实例,实现后台运行,大幅降低资源消耗:

修改后的代码:

import xlwings as xw
import os

def change_sensitivity_label(folder_path):
    # 启动不可见的Excel应用实例,复用该实例处理所有文件
    with xw.App(visible=False, add_book=False) as app:
        for filename in os.listdir(folder_path):
            if filename.endswith('.xlsx'):
                file_path = os.path.join(folder_path, filename)
                try:
                    wb = app.books.open(file_path)
                    labelinfo = wb.api.SensitivityLabel.CreateLabelInfo()
                    labelinfo.AssignmentMethod = 2
                    labelinfo.Justification = 'init'
                    labelinfo.LabelId = 'd5688d38-24b0-47bd-b6ed-0cb1b7409201'
                    wb.api.SensitivityLabel.SetLabel(labelinfo, labelinfo)
                    wb.save()
                    wb.close()
                    print(f"已为 {filename} 添加敏感度标签")
                except Exception as e:
                    print(f"{filename} 处理失败: {e}")

folder_path = r"C:\Users\NaHa\Downloads\April-VendorSplittingApp-test1"
change_sensitivity_label(folder_path)

关键优化点:

  • 用xw.App(visible=False, add_book=False)创建单个不可见Excel实例,避免反复启动/关闭Excel进程
  • 使用with上下文管理器,确保Excel实例自动关闭,不会残留后台进程

二、终极优化:直接操作OXML(无需启动Excel)

如果要彻底避免启动Excel进程,最快的方式是直接修改Excel文件的OXML结构(xlsx本质是压缩包,包含XML格式的元数据)。敏感度标签信息存储在文件的元数据节点中,我们可以通过解压、修改XML、重新打包的方式完成操作:

依赖安装

先安装所需库:

pip install lxml

实现代码

import os
import zipfile
from lxml import etree

def add_sensitivity_label(file_path, label_id):
    # 临时文件名,避免覆盖原文件
    temp_file = file_path + ".tmp"
    
    with zipfile.ZipFile(file_path, 'r') as zip_in:
        with zipfile.ZipFile(temp_file, 'w') as zip_out:
            # 复制所有文件到临时包
            for item in zip_in.infolist():
                data = zip_in.read(item.filename)
                # 修改核心元数据文件
                if item.filename == 'docProps/core.xml':
                    root = etree.fromstring(data)
                    # 定义命名空间
                    ns = {
                        'cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',
                        'mso': 'http://schemas.microsoft.com/office/2006/metadata'
                    }
                    # 添加敏感度标签节点
                    sensitivity_label = etree.SubElement(root, '{http://schemas.microsoft.com/office/2006/metadata}SensitivityLabel')
                    sensitivity_label.set('Id', label_id)
                    sensitivity_label.set('AssignmentMethod', '2')
                    sensitivity_label.set('Justification', 'init')
                    # 转换回字节格式
                    data = etree.tostring(root, encoding='UTF-8', xml_declaration=True)
                zip_out.writestr(item, data)
    
    # 替换原文件
    os.remove(file_path)
    os.rename(temp_file, file_path)

def batch_add_labels(folder_path, label_id):
    for filename in os.listdir(folder_path):
        if filename.endswith('.xlsx'):
            file_path = os.path.join(folder_path, filename)
            try:
                add_sensitivity_label(file_path, label_id)
                print(f"已为 {filename} 添加敏感度标签")
            except Exception as e:
                print(f"{filename} 处理失败: {e}")

# 配置参数
folder_path = r"C:\Users\NaHa\Downloads\April-VendorSplittingApp-test1"
label_id = 'd5688d38-24b0-47bd-b6ed-0cb1b7409201'
batch_add_labels(folder_path, label_id)

这种方式的优势:

  • 完全不依赖Excel进程,资源占用极低
  • 处理速度是启动Excel方式的5-10倍,适合批量处理大量文件
  • 避免了Excel版本兼容性、文件锁定等问题

注意事项

  • 操作前请备份文件,避免意外损坏
  • 若文件有密码保护或为xls格式,OXML方式不适用,建议使用第一种后台运行方案
  • 部分企业环境中,敏感度标签可能需要特定权限,确保运行代码的账号有足够权限

内容的提问来源于stack exchange,提问作者HP's PPTs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:02:39