最佳的MS Excel版本控制方法是什么?

180

你使用过哪些版本控制系统来管理MS Excel(2003/2007)?你会推荐哪些系统?为什么?你认为你所使用的最佳版本控制系统有哪些局限性?

以下是几种应用场景:

  1. 对VBA模块进行版本控制
  2. 多人共同编辑Excel表格,可能同时更改同一工作表,需要合并和整合这些修改。该表格可能包含公式、数据、图表等元素。
  3. 用户不太懂技术,尽量少用版本控制系统。
  4. 空间限制要考虑。理想情况下,只保存增量更改,而不是整个Excel电子表格。

17
谷歌应用/文档没有微软Excel的全部功能,如果您需要进行更高级的建模等工作,则需要Excel。 - TheObserver
26
如果这是一个实际可行的选择(即使用matlab/python),那么所有金融公司现在都会进行转换。要求分析金融模型但不是程序员的人成为程序员总体上是存在危险且相对不切实际的。@Richie Cotton - Anonymous Type
1
请参见此处的类似问题:https://dev59.com/C3RB5IYBdhLWcg3weXSX。但它并没有涉及到工作表本身,只是VBA代码。 - Vijay
8
责怪Excel建模是导致信贷危机的人很可能是故意将垃圾商品当作AAA出售的骗子。你不需要电子表格就能知道一个投资品是垃圾。作为金融从业者,我可以告诉你,完全依赖任何模型都是一种输钱的绝对途径。此外,任何模型的优劣取决于构建它们的人。如果你雇用普通人来完成像爱因斯坦那样的工作,你会遭遇糟糕的时光。 - Eric J
如果您主要只对VBA宏进行版本控制感兴趣,请参阅我的答案:https://dev59.com/Y3A75IYBdhLWcg3w_ef1#38297505 - Chel
如果您只对VBA VCS部分感兴趣,那么Chel链接的帖子是相关的,另外这个关于通过Git管理VBA的帖子也很有用:https://dev59.com/71oV5IYBdhLWcg3wnf3r#53160775 - Colm Bhandal
22个回答

2
在寻找了很长时间并尝试了许多不同的工具之后,我在这里找到了解决vba版本控制问题的答案:https://dev59.com/KHRB5IYBdhLWcg3wJkhC#25984759 这是一个简单的Excel插件,代码可以在这里找到。
导入后没有重复模块。它会在保存工作簿时自动导出您的代码,而不会修改任何现有的工作簿。它还带有一个vba代码格式化程序。

2

如果您在办公室中处理的是常规非技术用户,则Sharepoint是一个可行的选择。您可以设置启用版本控制、签入和签出的文档文件夹,使其更加适合普通办公室用户。


2

针对mattlant的回复 - 在文档库中只有在版本控制功能打开的情况下,SharePoint才能很好地作为版本控制工具使用。

此外,请注意,任何调用相对路径的其他文件的代码都将无法工作。最后,在SharePoint中保存文件时,任何指向外部文件的链接都将会断开。


1

1
TFS在工作项报告中大量使用Excel,不幸的是这与将Excel文件纳入源代码控制无关。 - Brad R

1

实际上,目前只有少数几种解决方案可以跟踪和比较宏代码的更改-其中大部分已经在此提到。我一直在浏览网络,并发现了这个值得一提的新工具:

XLTools Version Control for VBA macros

  • 用于Excel表格和VBA模块的版本控制
  • 提交版本之前预览和差异变化
  • 非常适合多个用户协作处理同一文件(跟踪谁在何时评论中做了什么修改)
  • 比较版本并逐行突出显示代码更改
  • 适用于不精通技术或者说不熟悉Excel的用户
  • 版本历史记录存储在Git-repository中,任何版本都可以轻松恢复

VBA代码版本并排显示,更改被可视化


1

使用任何标准版本控制工具,如SVN或CVS。限制取决于目标是什么。除了存储库大小的轻微增加外,我没有遇到任何问题。


0

还有一个名为Beyond Compare的程序,它拥有非常好的Excel文件比较功能。我在一张中文截图中看到过:

Beyond Compare - comparing two excel files (Chinese)
原始图片来源

他们的网页上提供了30天的试用期。


0

你可能尝试过使用 Microsoft 的 Excel XML 压缩容器 (.xlsx 和 .xslm) 进行版本控制,但发现 VBA 存储在 vbaProject.bin 中(这对版本控制毫无用处)。

解决方案很简单。

  1. 使用 LibreOffice Calc 打开 Excel 文件
  2. 在 LibreOffice Calc 中:
    1. 文件
    2. 另存为
    3. 保存类型:ODF 电子表格 (.ods)
  3. 关闭 LibreOffice Calc
  4. 将新文件的文件扩展名从 .ods 改为 .zip
  5. 在 GIT 维护的区域中为电子表格创建一个文件夹
  6. 将 zip 解压到它的 GIT 文件夹中
  7. 提交到 GIT

当您重复执行此操作以处理电子表格的下一个版本时,您必须确保文件夹中的文件与 zip 容器中的文件完全匹配(不要留下任何已删除的文件)。


4
然而,这种方法存在风险。如果你随后在Excel中使用了一个Libre没有实现或无法正确“映射”到Libre并返回的功能,这种方法将会出错。我确信这对于简单的电子表格是可行的,但必须极为小心。 - Phil Whittington

0
我找到了一个非常简单的解决方案来满足我的需求。我在所有宏的底部添加了一行代码,每次运行时都会导出一个包含整个宏代码的*.txt文件。代码如下:
ActiveWorkbook.VBProject.VBComponents("moduleName").Export"C:\Path\To\Spreadsheet\moduleName.txt"

(在Tom's Tutorials上找到,该网站还涵盖了一些设置,您可能需要进行设置才能使其正常工作。)

由于我每次在编写代码时都会运行宏,所以我保证git会捕捉到更改。唯一让人烦恼的是,如果我需要检出早期版本,我必须手动从*.txt复制/粘贴到电子表格中。


-1

这取决于您想要什么级别的集成,我使用过Subversion/TortoiseSVN,对于简单的用法似乎很好。我还添加了关键字,但存在文件损坏的风险。在Subversion中有一个选项可以使关键字替换为固定长度,据我所知,如果固定长度是偶数,则可以工作,但不是奇数。无论如何,您都不会获得任何有用的差异功能,我认为有商业产品可以进行“差异”。我找到了一些基于将内容转换为纯文本并进行比较的差异,但它并不是很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接