使用 VBA 在 Excel 文件中保存日志文件

Save logfile within Excel file using VBA

我正在尝试在 VBA 中开发一种方式来跟踪文档中的更改,而不必将内容隐藏在工作簿中的额外 sheet 中。

我了解到,如果将 Excel 文件的扩展名更改为“.zip”,则可以将 Excel 文档作为分类到目录中的组件进行访问。有没有一种方法可以在这些目录之一中保存和写入文本文件,以便我可以在每次打开文档时访问它,而不必让用户将日志文件与 Excel 文档一起拖动?

一些事实:

  • 当Excel打开文件时,文件被Excel阻止。无法在 VBA
  • 内写入该文件
  • 您可以在外部或在 Excel 工作簿关闭后将其他数据存储到该文件中
  • 您需要工作簿外部的代码才能在文件关闭后完成对该文件的写入。您可能想使用 VSTO 或老式 Excel 插件。
  • 您必须确保 Excel 在重组或修复文件时不会破坏您的更改。

在第一个运行中,您的想法听起来很自然,从程序员的角度来看不使用工作表。当

时,您只能完全控制 Excel 个文件
  • 您使用外部库(例如 Spreadsheet Gear)或
  • 您可以通过自动化远程控制 Excel。
  • 您使用 openxml SDK for Excel
  • 你用VBA

您可以插入附加信息并注意 Excel 不会跳过此信息。

如果您想以这种方式进行跟踪,我建议您使用 Excel 插件。使用这种Addin其实是不需要安装的。附加到打开工作簿和关闭工作簿事件,并确保在关闭后将所有更改写入 Excel 工作簿。当然,您必须附加到所有类型的其他事件以跟踪对工作簿的所有更改。您可能需要记住,一次可以打开多个工作簿。

其实还有其他选择。

  • 在 VBA 或任何合适的地方写下你的日志代码
  • 抽象出你如何持久化代码(例如使用数据提供者)
  • 考虑这两种存储日志数据的方法:

    • 您可以将记录数据保存在 excel 的单元格中。使用 excel 的 "newer" 版本时,您有 100 万行的限制。您可能想要实施一种滚动机制,以确保您永远不会超过 100 万条记录的边界。 (你可能不想跟踪一百万个变化)
    • 您可以使用文档属性将您的信息存储为 xml。

最后但同样重要的是,最明显的一点:为什么不使用 Excel 的跟踪更改功能? Understand track changes in Excel 2013