为MS Excel执行版本控制的最佳方法
您在MS Excel(2003/2007)中使用了哪些版本控制系统?你会推荐什么?为什么?您发现顶级版本控制系统存在哪些限制 为了更好地理解这一点,这里有几个用例:为MS Excel执行版本控制的最佳方法,excel,version-control,Excel,Version Control,您在MS Excel(2003/2007)中使用了哪些版本控制系统?你会推荐什么?为什么?您发现顶级版本控制系统存在哪些限制 为了更好地理解这一点,这里有几个用例: VBA模块的版本控制 不止一个人正在处理Excel电子表格,他们可能正在对同一工作表进行更改,并希望合并和集成该工作表。本工作表可能包含公式、数据、图表等 用户技术性不强,使用的版本控制系统越少越好 空间限制是一个考虑因素。理想情况下,只保存增量更改,而不是保存整个Excel电子表格 使用任何标准版本控制工具,如SVN或CVS。限制
使用任何标准版本控制工具,如SVN或CVS。限制取决于目标是什么。除了存储库的大小略有增加外,我没有遇到任何问题这取决于您谈论的是数据还是电子表格中包含的代码。虽然我非常不喜欢Microsoft的Visual Sourcesafe,通常也不会推荐它,但它确实可以轻松地与Access和Excel集成,并提供模块的源代码控制 [事实上,与Access的集成包括查询、报告和模块,作为可以进行版本控制的单个对象]
MSDN链接是。这取决于您想要的集成级别,我使用了Subversion/TortoiseSVN,它似乎适合简单使用。我还添加了关键字,但似乎存在文件损坏的风险。Subversion中有一个使关键字替换固定长度的选项,据我所知,如果固定长度是偶数而不是奇数,它将起作用。在任何情况下,您都无法获得任何有用的差异功能,我认为有一些商业产品可以实现“差异”。我确实发现了一些基于将内容转换为纯文本并进行比较的差异,但这不是很好。它应该适用于大多数VCS(取决于您可能选择的其他标准SVN、CVS、DARC、TFS等),但实际上它将是完整的文件(因为它是二进制格式),这意味着“发生了什么变化”这个问题不太容易回答
如果人们完成了日志消息,您仍然可以依赖日志消息,但是您也可以尝试Office2007中新的基于XML的格式,以获得更多的可见性(尽管仍然很难从大量的XML中剔除,而且AFAIK会将XML文件压缩到磁盘上,因此您需要一个预提交钩子来解压它,以便文本差异正常工作).如果您正在使用普通office非技术用户的office设置,Sharepoint是一个可行的替代方案。您可以设置启用版本控制、签入和签出的文档文件夹。这使普通office用户更容易使用它。您可以做的一件事是在工作簿中包含以下代码片段:
Sub SaveCodeModules()
'This code Exports all VBA modules
Dim i%, sName$
With ThisWorkbook.VBProject
For i% = 1 To .VBComponents.Count
If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
sName$ = .VBComponents(i%).CodeModule.Name
.VBComponents(i%).Export "C:\Code\" & sName$ & ".vba"
End If
Next i
End With
End Sub
我在网上找到了这个片段
之后,您可以使用Subversion来维护版本控制。例如,通过在VBA中使用Subversion的命令行界面和“shell”命令,就可以做到这一点。我甚至想自己做这件事:)我不知道有什么工具可以做到这一点,但我已经看到了各种国产解决方案。其共同点是在版本控制下最小化二进制数据,并最大化文本数据,以利用传统scc系统的功能。为此:
- 像对待任何其他应用程序一样对待工作簿。将逻辑、配置和数据分开
- 从工作簿中分离代码
- 以编程方式构建UI李>
- 编写生成脚本以重建工作簿
此外,请注意,任何通过相对路径调用其他文件的代码都不会工作。最后,当文件保存在sharepoint中时,任何指向外部文件的链接都将中断。我刚刚设置了一个使用Bazaar的电子表格,通过TortiseBZR手动签入/签出。考虑到这个主题在保存部分对我有所帮助,我想在这里发布我的解决方案 我的解决方案是创建一个电子表格,在保存时导出所有模块,在打开时删除并重新导入模块。是的,这可能对转换现有电子表格有潜在危险 这允许我通过Emacs(是的,Emacs)或在Excel中本机编辑模块中的宏,并在重大更改后提交我的BZR存储库。因为所有模块都是文本文件,所以BZR中的标准diff样式命令适用于我的源代码,Excel文件本身除外 我已经为我的BZR存储库设置了一个目录,X:\Data\MySheet。repo中有MySheet.xls和我的每个模块的一个.vba文件(即:module1宏)。在我的电子表格中,我添加了一个名为“VersionControl”的模块,该模块不受导出/导入周期的限制。要导出和重新导入的每个模块必须以“宏”结尾 版本控制模块的内容:
子SaveCodeModules()
'此代码导出所有VBA模块
昏昏欲睡$
使用ThisWorkbook.VBProject
对于i%=1到.VBComponents.Count
如果.VBComponents(i%).CodeModule.countofline>0,则
sName$=.VBComponents(i%).CodeModule.Name
.VBComponents(i%)。导出“X:\Tools\MyExcelMacros\”和sName$&.vba”
如果结束
接下来我
以
端接头
子导入解调器()
使用ThisWorkbook.VBProject
对于i%=1到.VBComponents.Count
ModuleName=.VBComponents(i%).CodeModule.Name
如果ModuleName为“VersionControl”,则
如果正确(ModuleName,6)=“宏”,则
.VBComponents.Remove.VBComponents(模块名称)
.VBComponents.Import“X:\Data\MySheet\”和ModuleName&“.vba”
如果结束
如果结束
[diff "xlsx"]
binary = true
textconv = python `git rev-parse --show-toplevel`/src/util/git-xlsx-textconv.py
[diff "xlsx"]
binary = true
textconv = python C:/Python27/Scripts/git-xlsx-textconv.py
*.xlsx diff=xlsx
ActiveWorkbook.VBProject.VBComponents("moduleName").Export"C:\Path\To\Spreadsheet\moduleName.txt"