以编程方式确定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工作簿单击"开发人员"选项卡,单击"工具",单击"数字签名"

以编程方式确定Excel工作簿(.xls)是否已进行数字签名

您可以使用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);