VB.Net如何处理敏感标签的Excel自动化

3

当我在VB.Net中为用户创建Excel文件时,尝试保存文件时出现错误(“在文件只读时无法执行此操作”),似乎是因为没有选择敏感度标签。我找不到任何关于在执行Excel自动化时处理敏感度标签的文档,所以想知道是否有人遇到过这个问题或知道相关文档?是否可以通过编程方式设置敏感度标签?


你确定文件在文件系统层面上不是只读的,并且你没有以只读方式打开它吗? - GSerg
我现在会进行验证。这可能需要一点时间,因为我没有遇到这个问题,所以我必须等待用户的回复。话虽如此,报告在最新的Windows/Office更新波之前一直工作正常。IT部门可能也采取了新的政策要求设置敏感标签,但我仍在等待确认。 - Tim F
该文件不是只读文件,所以这是另一个经典的Excel恶劣错误消息案例。 我修复了这个问题,并将其放入答案中,以便其他可能看到此消息的人可以参考。 - Tim F
2个回答

1

语法是Python,因为我正在使用它,但由于win32com.client只是一个COM包装器,所以这应该可以(使用适当的VB语法)适用于您。

您将需要以下数据,您可以从先前手动设置灵敏度标签为所需值的文件中提取:

existing_sl = existing_doc.SensitivityLabel.GetLabel()
label_id = existing_sl.LabelId
label_name = existing_sl.LabelName

label_id 将是一个 UUID,而 label_name 则是一个字符串。 然后,使用这些数据,您可以创建并设置一个新的敏感度标签,如下所示。

label_id = <the label ID you retrieved from the existing file>
label_name = <the label name your retrieved from the existing file>

new_sl = another_doc.SensitivityLabel.CreateLabelInfo()
new_sl.ActionId = str(uuid.uuid1())
new_sl.AssignmentMethod = 1
new_sl.ContentBits = 0
new_sl.IsEnabled = True
new_sl.Justification = ''
ew_sl.LabelId = label_id 
new_sl.LabelName = label_name 
new_sl.SetDate = '2022-08-15T07:02:00Z'
new_sl.SiteId = str(uuid.uuid1())
another_doc.SensitivityLabel.SetLabel(new_sl, new_sl)

uuid.uuid1()函数是Python中用于创建随机UUID的函数。你也可以使用其他方法或固定值。我没有进行深入的测试,但至少它可以使用随机UUID。据我所知,SiteId变量不需要与原始标签中的变量相同。对于SetDate,我只是懒得设置一个值。完全正确的做法是使用now函数或等效函数生成(格式正确的)日期时间字符串。

AssignmentMethod 使用MsoAssignmentMethod枚举。其中1表示“手动选择了标签”。

Python代码需要引入以下内容:

import win32com.client
import uuid

你可以在这里找到一些参考资料这里这里

如果你成功地在VB中实现了它,欢迎发布结果 :)


1
我创建了一个模板文件(存储在数据库中并下载到本地机器),我设置了敏感度,然后填充了它,而不是通过自动化过程创建Excel文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接