以编程方式确定Excel工作簿(.xls)是否已进行数字签名
本文关键字:是否 数字签名 xls 方式确 编程 Excel 工作簿 | 更新日期: 2023-09-27 18:22:08
我目前有一个管理程序(用.NET 4.5编写),它将Excel工作簿打包下载给我们的客户。工作簿保存为.XLS(必需)。我正在寻找一种方法(通过Excel 2010 VBA或.NET 4.5 C#,最好是C#),以编程方式检查Excel工作簿是否已进行数字签名。
编辑:我在要求方面错了。我需要在房子的VBA/宏一侧寻找数字签名。
例如:打开excel工作簿单击"开发人员"选项卡,单击"工具",单击"数字签名"
您可以使用Microsoft Office Tools来完成此操作。在程序集Microsoft.Office.Tools.Excel.v4.0.Utilities
中,您会发现WorkbookBase类具有返回集合的Signatures
属性。WorkbookBase文档在这里。特别是签名被定义为
获取工作簿的数字签名集合
由于它是一个集合,您可以对其进行迭代,或者使用Count
属性来确定存在多少数字签名。该集合是SignatureSet,有关它的文档可以在该链接的文档中找到。计数定义为:
返回一个整数,指示指定集合中的项数。
可以使用常规Microsoft.Office.Interop.Excel
程序集和普通Workbook类来确定VBA代码是否已通过Workbook
对象上的VBASigned
属性进行了签名。有关该房产的信息可以在这里找到。
获取一个值,该值指示工作簿的Visual Basic for Applications项目是否已进行数字签名。
假设您使用的是C#,并且Microsoft.Office.Interop.Excel
程序集已被添加为VS C#项目中的引用,那么这样的代码将打开您的工作簿并获得VBA符号布尔标志:
using Excel = Microsoft.Office.Interop.Excel;
[snip]
Excel.Application exApp = new Excel.Application();
Excel.Workbook exWbk = exApp.Workbooks.Open(@"c:'path'to'your'workbook.xls");
Boolean signed = exWbk.VBASigned;
exWbk.Close();
// When finished make sure we release the Interop COM objects we used
Marshal.ReleaseComObject(exWbk);
Marshal.ReleaseComObject(exApp);