VSTO加载项中的Excel文档版本

我经常使用基于VSTO Excel模板的解决scheme。 我喜欢这个项目types的一件事是,我可以在Excel模板或工作表中使用caching的数据集来处理在用户保存文件后仍然存在的应用程序状态。 但是,caching的数据集会产生问题:文档的模式绑定到应用程序版本。

这并不是一个大问题,但是我意识到创build一个机制可以读取打开的Excel文档的版本,以便检测和处理版本不兼容的问题。 例如,如果我的2.1插件打开一个1.5文档,caching数据的模式将不符合预期。

是否有一个标准的或推荐的方式来版本的Excel模板或工作表? 如果没有,有没有人有如何做到这一点的build议?

我通常使用Worksheet.CustomProperties将这样的信息保存到我的工作表中。 您将放入CustomProperties集合中的任何信息与工作表一起保存,并在重新加载工作表时随工作表信息一起加载。

工作簿也支持自定义属性,但我认为在你的情况下Worksheet.CustomProperties是要走的路。

我不知道任何标准,但你可以考虑:

  1. 使用Microsoft.Office.Core.DocumentProperties可访问的自定义文档属性( 如何:读取和写入文档属性 );
  2. 工作表本身中的受保护的单元格;

用第一种方法,用户可以手动改变这个属性或删除它。 然而,第二种方法,如果我记得正确的话,你将会保护工作表中的单元格,如果你想对该工作表中的任何数据进行sorting,会引入一些问题。

我有一个类似的问题(如何从VSTO代码中确定Excel版本)。 我find你的问题,同时寻找解决scheme。 对我而言,Excel Application对象的Version属性是有效的。 在工作表中:

 Me.Application.Version 

或者,也许,取决于你在哪里

 Globals.ThisWorkbook.Application.Version 

无论如何,Excel 2003的值为“11.0”,2007年的值为“12.0”。

但是,在重新阅读您的问题时,您需要知道创build工作簿的版本。 您可以尝试Workbook.CalculationVersion ,它“获取一个数字,指示工作簿上次完全重新计算的Excel版本。最右边的四位数是次要计算引擎版本号,其他数字(左边)是主要版本的Microsoft Office Excel“。 按照http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.calculationversion.aspx