2

可以,然后呢。我需要一些指导。对于这篇文章的篇幅,我深表歉意,但我需要提供一些细节:

我有一个对我感兴趣的人为他们做一个小项目。该应用程序通常是一个相当简单的员工记录保存/文档应用程序,但它大量使用模板化的 Word 和 Lotus 文档。这个想法是你选择员工的“事件”,如表彰、晋升、纪律等,它会加载适当的模板文档并从那里填写,然后你可以选择一个员工,查看所有的“事件, ”并查看与每个文档相关的单个文档。

因此,应用程序必须知道用户完成后 .docs 的保存位置。

客户端实际上有这个应用程序的 v1(它不对文件或任何东西进行任何管理,只是启动 Word/Lotus 以及您想在新实例中查看的文档,大概是通过 system() 调用。)我们' 还没有进入详细的需求阶段,但客户和我都同意,要真正发挥作用,对用户将 .doc 保存到的位置进行某种控制将是至关重要的,因为否则应用程序会为他们提供模板文档的新副本,他们在其他地方“另存为”,并且应用程序指向它提供给他们的空白副本。

显然,我想不出一种方法来通过启动 Word 的新实例以任何方式实现“另存为”限制/控制。当您选择一个模板文档时,客户会想到在应用程序中嵌入 Word/Lotus 实例,但我对此几乎没有保留意见:

  • 我在网上搜索过,我读过我从哪个版本借用 MSWORD.OLB 的 Word 将是最终用户需要的那个版本?
  • 我已经尝试从这里做嵌入 Word 文档的 MSDN 示例,但是当我已经习惯时,MSDN 示例甚至无法编译。
  • 即使我知道如何将 .doc 文件嵌入到他们的应用程序中,我也不知道我可以控制“另存为...”的使用</li>
  • 所有这些仍然没有触及 Lotus (!)

所以……本能地,我觉得嵌入 Word/Lotus 的东西最终必须比它的价值更多。

所以我有一些其他的想法正在酝酿中。

  1. 一种是研究使用 Office XML(如果有类似的 Lotus),并分别获取用户的“输入”并在每次运行时生成文档。我对这个想法并不特别兴奋,但我认为它可以工作,只要我使用旧功能来尝试保持向后兼容。
  2. 分别获取用户的“输入”并生成 HTML 文档。嗯。工作,非常跨平台,易于解析和理解,但如果您希望能够通过电子邮件将其通过电子邮件发送给某人(谁通过电子邮件发送 .html?工作,是的,非常非常规,这对于普通用户来说会甩掉他们),甚至更糟糕的是,如果您需要通过电子邮件将其发送给某人进行修改……</li>
  3. 也许某种可编辑的PDF?我知道那里有 PDF 库,我越关注它,这听起来越像是最好的选择,尽管我没有对 PDF 做太多的工作,我不知道它们有多容易嵌入/有哪些选项创建它们时有一个。我知道他们可以被禁用保存,我以前用我的血腥州税就有过这种情况。

我需要在这里输入一些信息。以下是 TLDR 问题:

  1. 为每个 .doc 启动一个新的 Word 实例是否像我觉得的那样糟糕,因为用户可以在任何地方“另存为”文档,然后应用程序指向一个空白文档?
  2. 尝试支持嵌入的 Word 是否像我觉得的那样麻烦/比它的价值更多/可能导致支持多个版本的 Word 出现问题?(前向兼容性以及当前发布的版本?)
  3. 对 PDF 计划有何想法?
  4. 还有什么好主意吗?
4

1 回答 1

2

Word 确实允许通过其对象模型对一些“保存”和“另存为”控件进行编程。任何用 VBA 编码并放入 Word 模板的子例程都将被复制到从该模板生成的所有文档中。此外,大多数菜单和功能区命令都可以通过创建一个包含以被拦截命令命名的子例程的模块来拦截。因此,例如,如果一个模块包含一个名为 FileSaveAs() 的子程序,则该子程序中的任何代码都将被执行,而不是标准的 File|Save As 命令。最后,此代码将替换通过击键、工具栏、菜单或功能区执行的“另存为”命令。

每当执行“保存”或“另存为”命令时,下面的代码将启动一个对话框到预定路径:

Sub FileSave()
ControlSaveLocation
End Sub

Sub FileSaveAs()
ControlSaveLocation
End Sub

Sub ControlSaveLocation()
Dim Directory As String
Directory = "C:\Documents\"
With Application.Dialogs(wdDialogFileSaveAs)
    .Name = Directory
    .Show
End With
End Sub

希望这可以帮助。

于 2011-08-12T05:25:41.700 回答