代码之家  ›  专栏  ›  技术社区  ›  Craig McQueen Dr. Watson

Word/OpenOffice文档当前SVN版本的自动字段更新

  •  4
  • Craig McQueen Dr. Watson  · 技术社区  · 15 年前

    Subversion的“关键字”功能非常适合自动标记带有修订号的文本文件。我真的想对Word和/或OpenOffice文档做类似的事情。

    我在Word文档中尝试了这个方法,在“Comment”文档属性字段中插入“Fixed Width”关键字替换。但它似乎仍然以某种方式损坏了文档(另外,我不知道“固定宽度”在多字节字符的情况下可能意味着什么)。我也不喜欢这个想法,因为这样做不利于在文档的可打印部分插入数字。

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

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

    5 回复  |  直到 14 年前
        1
  •  3
  •   Community Neeleshkumar S    7 年前

    第一: Embedded Version Numbers - Good or Evil? 我发现他们很邪恶。

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

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

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

    另外,如果用当前修订号修改文档,则仍需要提交,这意味着存储的版本将位于修订号中。 不同的 而不是宏更新的。
    如果未提交,则始终有可能文档被标记为“未提交”。 确切地 最初向颠覆者询问的那个。


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

    那个线程 update word 2003 fields automatically 建议使用Office API。 Microsoft.Office.Interop 不允许修改属性,但VBA API允许您访问要为给定属性设置的任何自定义属性 SmartTag .

    本文“ To add a smart tag with a custom recognizer to a Word document “给出了一个智能标记自定义行为的示例。

    智能标记是带有附加类型信息的文本字符串;当匹配条件的文本字符串出现在文档中时,将识别该字符串,并且用户能够执行适合该类型字符串的操作。

    因此,可以想象一个智能标记能够识别字符串“Revision for this document”,其自定义行为为“I will query the right revision number to SVN and display it”

        2
  •  1
  •   Stefan    15 年前
        3
  •  1
  •   Lars Kristensen    15 年前

    我们实际上使用了一个类似的“系统”(由一个前学院创建),解决了一些问题。

    欲望…

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

    解决方案

    我们不使用SVN版本号,而是使用“人类”版本号来修改文档。为了确保我们没有多个版本具有相同的版本号浮动在数字周围,每当文档被修改时都会自动更新,也就是说,将有几个从未发布的“修订”…我猜这并不完美…

    半技术细节…

    • “人工”修订号存储在文档的自定义属性中。
    • 我们已将所有Word文档设置为需要锁定(SVN:需要锁定)
    • 锁定时,在修订字符串的末尾添加一个加号,以指示“脏”版本。
    • 提交时,加号将被删除,数字将递增。

    结果

    打印文件中有修订号的系统:

    • 除非文档发生更改,否则不要更改
    • 表示脏版本,即从修改后的工作副本打印输出
    • 如果文档不同,则不同(即作者忘记更新修订版没有问题)
        4
  •  0
  •   JasonPlutext    15 年前

    如果将Word文档保存为.xml(所谓的平面opc格式),会怎么样?

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

        5
  •  0
  •   Craig McQueen Dr. Watson    15 年前

    VONC的回答让我确信,DocOpen不是更新文档属性的正确时机。例如,如果文件通过电子邮件发送给其他人,或复制CD,或“导出”,则在打开时无法更新其SVN版本。很难确保文件永远不会包含错误的过期版本号。因此,要“正确”执行此操作,应在SVN签出/更新时更新文件的修订号。

    我相信对于文本文件中的SVN关键字,客户机会对文件进行“篡改”,在签出时更新它,并在提交之前返回到“规范”表单。因此,换句话说,使用客户端钩子来做同样的事情是非常好的。 TortoiseSVN has client-side hooks, 但我不认为其他SVN客户会这么做。在我的工作中,我们几乎总是使用Tortoissesvn,这样可以很好地工作。

    所以我想写两个Tortoissesvn客户端钩子:

    1)发布更新挂钩,插入包含文件相关提交SVN修订的“SVNRevision”文档属性。

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


    更新: 我刚刚意识到另一个问题:如果我这样做,那么SVN会认为文件已经更改。嗯,这似乎很困难。为了使特性正常工作,它确实需要与客户机进行相当紧密的集成。