我目前有一个管理程序(用.NET 4.5编写),它将Excel工作簿打包下载给我们的客户。工作簿保存为.XLS(要求)。我正在寻找一种方法(通过Excel 2010 VBA或.NET 4.5 C#,最好是C#)以编程方式检查Excel工作簿是否已经过数字签名。
编辑:我对这些要求有误。我需要在房子的VBA / Macro侧寻找数字签名。例如: 打开一个excel工作簿 单击“开发人员”选项卡,单击“工具”,然后单击“数字签名”
答案 0 :(得分:1)
您可以使用Microsoft Office工具执行此操作。在程序集Microsoft.Office.Tools.Excel.v4.0.Utilities
中,您会发现WorkbookBase类具有返回集合的Signatures
属性。 WorkbookBase文档为here。特别是签名被定义为
获取工作簿的数字签名集合
由于它是一个集合,您可以迭代它或使用Count
属性来确定存在多少个数字签名。该集合是一个SignatureSet,其文档可以在link的文档中找到。计数定义为:
返回一个Integer,表示指定集合中的项目数。
您可以使用常规Microsoft.Office.Interop.Excel
程序集和常规Workbook类来确定 VBA代码是否已通过VBASigned
上的Workbook
属性进行了签名宾语。有关该财产的信息可以找到here。
获取一个值,该值指示工作簿的Visual Basic for Applications项目是否已经过数字签名。
假设您正在使用C#并且已在VS C#项目中添加Microsoft.Office.Interop.Excel
程序集作为参考,那么这样的代码将打开您的工作簿并获取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);