【问题标题】:Repository info (SVN) integration with Excel存储库信息 (SVN) 与 Excel 的集成
【发布时间】:2016-11-16 01:00:40
【问题描述】:

我对这种事情不熟悉。有点像有史以来第一篇关于编程的帖子,因为到目前为止,我设法用谷歌搜索了我需要的所有东西。感谢您的耐心等待:)。

关于我的问题/目标: 在我们的项目中,我们必须有某种文档管理控制。我们将有大约 160 个 .docx 文件(所有文件都是已知的),对于版本控制,我们将使用 SVN。这些文件将保存在不同的文件夹中(我将进一步制作存储库结构),文件夹将具有我们目前在项目中所处的阶段的功能(我们将有大约 12 个文件夹)。当一个阶段完成时,标记 aka。将正式发布。 每个文件都将放置在 MS Excel 工作表列中,其中包含以下数据:阶段、名称、修订、标签、超链接 ..

我要做的是: 将在存储库中搜索文件的宏,如果找到,则读取它的修订版、标签(最新).. 将其写入 excel 工作表并在另一列中创建指向该文件的超链接。

存储库结构:

  • 后备箱
    • System_Development
      • System_Requirements_Specifications.docx
      • System_Architecture_Description.docx
      • System_Safety_Plan.docx
      • ...
    • 软件规划
      • Software_Quality_Assurance_Plan.docx
      • Software_Configuration_Management_Plan.docx
      • ...
    • ...
  • 分支(可能不会被使用,还不确定)
  • 标签
    • 1
      • System_Development
        • System_Requirements_Specifications.docx
        • System_Architecture_Description.docx
        • System_Safety_Plan.docx
        • ...
    • 2
      • System_Development
        • System_Requirements_Specifications.docx
        • System_Architecture_Description.docx
        • System_Safety_Plan.docx
        • ...
      • 软件规划
        • Software_Quality_Assurance_Plan.docx
        • Software_Configuration_Management_Plan.docx
        • ...

我已经制作了一个可以执行确切操作的宏,但问题是它非常慢。如何以及为什么?

我使用ShellAndWait("cmd.exe /c svn list --verbose http:\\localhost\trunk > text.txt"),解析该文本文件以获取主干中的文件夹,然后检查这些文件夹中的哪些文件(每个文件夹都有另一个 ShellAndWait),如果找到它们,则获取修订号等等..

正如您最后看到的,在我的代码中,svn 命令执行了 13 次,因此找到了存储库中的文件。使用 svn list --verbose 我也得到了修订号。对于 svn 命令执行它持续大约 0.15-0.20 秒,所以我的修订号收集持续大约 2 秒。这不是问题。

获取标签是个问题,因为我在文件夹中有文件夹,所以最后我们可能会执行大约 40 甚至更多的 svn,这会使我的标签功能非常慢。

我不知道如何使用 svn.exe 以任何其他方式访问存储库。我正在考虑远程访问存储库并查询数据库或其他什么,仍在研究那部分。

希望您能理解我的问题,更多信息我一整天都在使用!感谢您的帮助!

【问题讨论】:

  • 您的具体问题是什么?
  • 猜猜我必须编辑我的帖子。我的问题是,如何更快地访问 SVN 存储库信息,因为 svn.exe 命令需要很长时间才能使宏正常工作。

标签: svn excel vba


【解决方案1】:

svn list 有一个选项 -R 或 --recursive 以包含所有子文件夹。因此,以所有必需文件夹都是主文件夹的子文件夹的方式组织文件夹结构将减少所需的调用次数。 或者,您可以使用 --depth 选项来控制要下降的子文件夹的深度。

svn help list 输出中提取:

  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                            'immediates', or 'infinity')

我。 e.以主干和分支在文件夹结构中相对较高的方式组织您的项目,并且不同的阶段在其之下。

【讨论】:

  • SVN 命令不包括子文件夹。如果是这样,请证明我错了 :) 重组我们的存储库是不可能的,不是我的决定!问题开始只是因为首先是新的文件夹结构:(
  • @krizajB - 我刚刚检查过:它不是默认值,而是递归子目录的选项:-R 或 --recursive。我会相应地编辑我的答案。
  • 谢谢!我会尝试使用它,真的希望我能找到一些用途。我一直在努力寻找开关,以至于在一周的研究中看不到最重要的开关:)
  • 对于那些可能想知道我是如何做到的人。对于修订收集,我使用了这样的 svn 命令:GetCommandOutput("cmd.exe /c svn list -v -R http:/localhost/documents/trunk"),将该字符串解析为数组并将有用的信息插入到我的 Excel 工作表中。对于标签,我使用了更快的命令:GetCommandOutput("cmd.exe /c svn list --depth infinity http:/localhost/documents/tags"),解析字符串以获取标签。弗兰克,再次感谢!
【解决方案2】:

您可以编写一个Java 东西,它可以直接通过SVNKit 访问SVN 存储库,而无需调用svn.exe 并从那里提取信息并通过PIO 框架写入Excel 文件。这可以构建为 Web 应用程序并动态创建信息...

【讨论】:

    【解决方案3】:

    您可以使用 API for .NET 访问存储库。见this answer

    不过,您可能需要使用 VSTO 而不是 VBA。

    【讨论】:

      【解决方案4】:

      如果您使用像 Tortoise svn 这样的客户端提供可在 vba 中使用的对象,您可以查询您的存储库,而无需使用临时文本文件进行解析。

      您可以直接在您的 vba 对象中获取信息:

      示例:

      Dim oSvn As Object
      Set oSvn = CreateObject("SubWCRev.object.1")
      
      workingCopy = path & "\" & filename
      
      oSvn.GetWCInfo workingCopy, 1, 1
      
      If Not oSvn.IsSvnItem Then
          ErrorCode = -1
      End If
      

      这并不完全符合您的要求,它只是直接从 vba 代码查询存储库的示例。写起来又快又容易

      SubWCRev 附带许多其他功能。 这是官方页面。

      https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev-com-interface.html

      【讨论】:

        猜你喜欢
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多