Word / Openoffice文档的当前SVN修订的自动字段更新

时间:2009-04-23 13:28:10

标签: svn ms-word openoffice.org

Subversion的“关键字”功能非常适合使用修订号自动标记文本文件。我真的很喜欢为Word和/或OpenOffice文档做类似的事情。

我使用Word文档尝试了这一点,方法是在“注释”文档属性字段中插入“固定宽度”关键字替换。但它似乎仍然以某种方式损坏了文档(另外我不知道在多字节字符的情况下“固定宽度”可能意味着什么)。我也不喜欢这个想法,因为将数字插入文档本身的可打印部分并不好。

我现在想象的是一个在文档打开时自动运行的宏,并更新自定义文档属性。该文档可能包含doc属性引用字段,这些字段使用doc属性中存储的值进行更新。

有没有人这样做过,或者做过其他任何事情来实现这个目标?对于Word或OpenOffice?

5 个答案:

答案 0 :(得分:3)

首先:Embedded Version Numbers - Good or Evil?:我觉得他们很邪恶。

您不应使用技术内部修订号来表示文档的版本。

“这是我的word文档的2.2修订版”与“这是我的word文档的修订版1567”不同。

  • 从最终客户的角度来看,前者是一个“适用”修订号。
  • 从工具的角度来看,后者是一个“技术”版本号。

另外,如果它使用当前版本号修改文档,则仍需要提交,这意味着存储的版本将与您的宏更新的版本号不同。<登记/> 如果没有提交,那么被标记的文档总是有可能完全最初从Subversion查询的文档。


有人说......关于更新Office文档属性的更一般性问题:

该帖子update word 2003 fields automatically建议使用Office API。 Microsoft.Office.Interop不允许修改属性,但VBA API允许您访问要为给定SmartTag设置的任何CustomProperty。

本文“To add a smart tag with a custom recognizer to a Word document”为您提供了SmartTag自定义行为的示例。

智能标记是附加了类型信息的文本字符串;当符合条件的文本字符串出现在文档中时,它会被识别,用户可以执行适合该类型字符串的操作。

因此可以想象SmartTag能够识别字符串“此文档的修订版本”,自定义行为为“我将向SVN查询正确的修订版号并显示它”

答案 1 :(得分:1)

答案 2 :(得分:1)

我们实际上使用的“系统”有点相似(由前同事创建),解决了一些问题。

欲望......

  • 我们希望能够看到两个打印输出实际上是同一个版本。
  • 我们希望能够找到打印输出源(包括修订版)。
  • 我们希望消除源于作者忘记更新版本号的问题。

解决方案

我们没有使用svn修订号,而是使用“人”修订号作为我们的文档。为了确保我们没有多个具有相同版本号的版本,每当文档被修改时,数字会自动更新,即会有几个永远不会发布的“修订版”...猜测它并不完美... < / p>

半技术细节......

  • “人”修订号存储在文档的自定义属性中。
  • 我们已将所有word文档设置为requre lock(svn:needs-lock)
  • 在锁定时,会在修订字符串的末尾添加一个加号,以表示“脏”版本。
  • On Commit将删除加号,并且数字会递增

<强>结果

我们在打印文档中有修订号的系统:

  • 除非文档更改,否则不要更改
  • 表示脏版本,即来自修改后的工作副本的打印输出
  • 如果文件不同(即作者忘记更新修订版没有问题),则会有所不同。

答案 3 :(得分:0)

如果将Word文档另存为.xml(所谓的Flat OPC格式)怎么办?

然后它只是一个文本文档,svn关键字应该可以正常工作。

答案 4 :(得分:0)

VonC的回答使我确信doc-open不是更新文档属性的最佳时机。例如,如果文件通过电子邮件发送给其他人,或者复制了CD,或者“导出”,那么它在打开时无法更新其SVN版本。很难确保文件永远不会包含错误的过时版本号。因此,要“正确”执行此操作,应在SVN结帐/更新时更新文件的修订号。

我相信文本文件中的SVN关键字,客户端对文件进行“摆弄”,在结帐时更新它并在提交之前返回“规范”表单。所以对于Word来说,使用客户端钩子做同样的事情会很棒。 TortoiseSVN has client-side hooks,但我不认为其他SVN客户会这样做。在我的工作中,我们几乎总是使用TortoiseSVN,因此可以很好地工作。

所以我想做的是编写两个TortoiseSVN客户端钩子:

1)更新后挂钩,用于插入包含文件相关提交SVN修订版的“SvnRevision”文档属性。

2)预提交钩子以删除“SvnRevision”文档属性。这使得在非TortoiseSVN客户端检出文件时,存储在存储库中的文件“干净”。 (它也可以防止合并冲突?)


更新: Arrr我刚刚意识到另一个问题:如果我执行上述操作,那么SVN会认为该文件已更改。嗯这似乎很难。为了使功能正常工作,它确实需要与客户端进行相当紧密的集成。