Excelmacros的数字签名
在我们的项目中,我们有一个Excel模板(.xlt)和一个加载项文件(.xla)。 这些文件用于创build一个数据视图。 Dataview只不过是一种报告。 xla包含创build,删除,pipe理数据视图及其内容的控件的代码。 这些控件是在VC ++中创build的用于创build数据视图的OCX控件。 我们分别有加载项代码和模板文件。
xlt和xla进行了数字签名,以确保代码防篡改。 一切正常,直到数字签名进入图片。 dataview是通过打开模板文件(.xlt)并将文件保存为.xls扩展名而创build的,因此不会更改数字签名的xlt和xla文件。 当我们试图保存这个信息时,我们会得到如下的信息:“你正试图修改已签名的项目,你没有正确的密钥来签署项目….”
当我们给保存更改并丢弃签名时 ,只有生成的新文件才会丢失签名。 xlt和xla的签名保持不变。
我们也尝试手动编辑excel中的单元格并保存,但是我们没有得到这个消息。 只有在使用OCX控件创build数据视图并保存popup窗口上面的消息后。
你想保护什么? 您是否签署了整个工作簿/模板,还是仅签署了代码?
.xls是.xlt的副本,所以模板签名也被复制到xls。 思路:
- 尝试仅签署模板中的代码。 在IDE中,使用工具 – >数字签名(Excel 2002/2003)
- 删除模板中的所有代码,并将其放入添加中
- 如果这太难了,只需使用模板中的代码即可添加
我也有类似的问题。 我发现只有当我的macros插入或删除工作表到工作簿时才发生。 事实certificate,因为每个工作表都有特定于该工作表的macros,所以添加或删除工作表可以有效地修改macros源代码。
感谢Turbo Law的Keith Survey,让我指出了这个问题的正确方向:
我一直无法find解释此问题的权威微软源代码。