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

时间:2014-09-17 14:29:26

标签: c# excel vba excel-vba ms-office

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

编辑:我对这些要求有误。我需要在房子的VBA / Macro侧寻找数字签名。

例如: 打开一个excel工作簿 单击“开发人员”选项卡,单击“工具”,然后单击“数字签名”

1 个答案:

答案 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); 
相关问题