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

我目前有一个pipe理程序(用.NET 4.5编写),将Excel工作簿打包下载给我们的客户。 工作簿保存为.XLS(要求)。 我正在寻找一种方法(通过Excel 2010 VBA或.NET 4.5 C#,最好是C#)来编程检查Excel工作簿是否已经数字签名。

编辑:我是错误的要求。 我需要在房子的VBA /macros观方面寻找数字签名。

例如:打开一个excel工作簿,点击开发者标签,点击“工具”,点击“数字签名”

你可以用Microsoft Office Tools来完成。 在程序集Microsoft.Office.Tools.Excel.v4.0.Utilities您会发现WorkbookBase类具有返回集合的Signatures属性。 WorkbookBase文档在这里 。 特别是签名被定义为

获取工作簿的数字签名的集合

由于它是一个集合,您可以迭代它或使用Count属性来确定有多less数字签名存在。 这个集合是一个SignatureSet,关于它的文档可以在这个链接的文档中find。 计数定义为:

返回一个整数,指示指定集合中的项目数量。

您可以使用常规的Microsoft.Office.Interop.Excel程序集和正常的Workbook类来确定VBA代码是否已通过Workbook对象上的VBASigned属性进行签名。 有关该财产的信息可以在这里find。

获取一个值,该值指示工作簿的Visual Basic for Applications项目是否已经数字签名。

假设你正在使用C#,并且Microsoft.Office.Interop.Excel程序集已经添加为你的VS C#项目的参考,那么这样的代码将打开你的工作簿,并获得VBASigned布尔标志:

 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);