使用 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
我正在尝试在 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