VSTO加载项中Excel文档的版本

VSTO加载项中Excel文档的版本,excel,vsto,versioning,Excel,Vsto,Versioning,我经常使用VSTO Excel基于模板的解决方案。我喜欢这种项目类型的一点是,我可以使用Excel模板或工作表中的缓存数据集来处理用户保存文件后持续存在的应用程序状态。但是,缓存的数据集会产生一个问题:文档的架构绑定到应用程序版本 这不是一个大问题,但我意识到,创建一种机制,在Excel文档打开时读取其版本,以便检测和处理版本不兼容,这将是一个好主意。例如,如果我的2.1插件打开1.5文档,缓存数据的模式将与预期不匹配 是否有标准或推荐的方法在Excel模板或工作表上加盖版本戳?如果没有,是否有

我经常使用VSTO Excel基于模板的解决方案。我喜欢这种项目类型的一点是,我可以使用Excel模板或工作表中的缓存数据集来处理用户保存文件后持续存在的应用程序状态。但是,缓存的数据集会产生一个问题:文档的架构绑定到应用程序版本

这不是一个大问题,但我意识到,创建一种机制,在Excel文档打开时读取其版本,以便检测和处理版本不兼容,这将是一个好主意。例如,如果我的2.1插件打开1.5文档,缓存数据的模式将与预期不匹配


是否有标准或推荐的方法在Excel模板或工作表上加盖版本戳?如果没有,是否有人对此有建议?

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

  • 使用可由Microsoft.Office.Core.DocumentProperties访问的自定义文档属性()
  • 工作表中受保护的单元格 本身 使用第一种方法,用户可以手动更改或删除此属性。但是,第二种方法是在工作表中保护单元格,如果我没记错的话,如果您想对该工作表中的任何数据进行排序,这将带来一些问题。

    我也遇到了类似的问题(如何从VSTO代码中确定Excel版本)。我在寻找解决方案时发现了你的问题。对我有效的是Excel应用程序对象的Version属性。从工作表中:

    Me.Application.Version
    
    或者可能,取决于你在哪里

    Globals.ThisWorkbook.Application.Version
    
    无论如何,Excel 2003的值为“11.0”,2007的值为“12.0”


    但是,在重读您的问题时,您需要知道创建工作簿的版本。您可以尝试使用
    Workbook.CalculationVersion
    ,它“获取一个数字,表示上次完全重新计算工作簿时使用的Excel版本。最右边的四位数字是次要计算引擎版本号,其他数字(左侧)是Microsoft Office Excel的主要版本。”根据

    我通常使用sheet.CustomProperties将此类信息保留到我的工作表中。放入CustomProperties集合的任何信息都将与工作表一起保存,并在重新加载工作表时与工作表信息一起加载回


    工作簿也支持自定义属性,但我认为在您的工作表中。CustomProperties是一个不错的选择。

    这并不是我想要的,但我认为在文档属性中添加版本戳是有道理的。诚然,用户可以修改版本,但也可以查看,这对故障排除有很大帮助。在许多情况下,受保护的单元格是必需的,但也是一个麻烦,它们特定于工作表而不是工作簿,因此我更喜欢文档属性解决方案。感谢提供信息。我不需要知道哪个Excel版本创建了工作簿。我的问题涉及在基于文档或模板的解决方案中使用缓存数据集。我想做的是在文档本身上加上一个版本戳,这样我就可以验证缓存数据的模式。是的,太完美了!特定于工作表,用户不可修改。这就是我要找的,谢谢!好主意-现在,它可以自动进入Visual Studio中的发布功能,以便主要、次要、修订和构建信息进入其中吗?@Fuhrmanator:如果您将版本信息保存在CustomXmlPart中,您可能会这样做。有很多方法可以剥那只猫的皮。