【问题标题】:How do I enhance a VBA method?如何增强 VBA 方法?
【发布时间】:2011-07-11 07:32:43
【问题描述】:

我正在尝试通过 HTTP 从远程服务器打开 Word 文档。 Documents.Open 方法可以很好地支持这一点,因为我可以将 URL 作为文件名传递给它,然后它会从远程服务器加载它。

但是,为了获取文件,我需要将凭据发布到 URL,然后按照响应的位置字段获取文件。在将内容传递给 Word 以打开之前,如何子类化或重载 Documents 对象以执行此步骤?

忘了提——这使用基于 cookie 的身份验证,所以我需要在各种 HTTP 会话之间保留经过身份验证的 cookie。

编辑#2:或者,

如果我将获得一个完整的基于 MSXML2.XMLHTTP 的子例程,该子例程将发布身份验证,从响应中解析出 set-cookie 和位置标头,并使用它们从服务器获取文档内容,有什么办法吗?我可以将内存中的文档作为文件打开,而不是随意地将临时文件转储到文件系统中吗?通过阅读文档, Open() 仅支持文件名(或路径)。

我相信 IO.System.MemoryMappedFile 有一种 .NET 方法可以解决这个问题,但是有什么方法可以将它暴露给 COM,这样我就可以将字节流转储到一个函数中,获取一个文件句柄,然后传递它要.Open()来处理?

【问题讨论】:

    标签: .net vba com ms-word


    【解决方案1】:

    您可以使用 XMLHTTP 执行发布,然后解析路径的响应。据我所知,您不能覆盖像 .Open() 之类的内置方法

    http://www.15seconds.com/issue/991125.htm

    在该页面的中途有一个 VBA 中的 POST 示例

    提姆

    【讨论】:

    • 知道我忘记了一些事情——我可以通过这种方式获取 URL,但是 POST 身份验证的过程会设置一个 cookie,然后用于访问文件的 URL。如果未设置 cookie,则只需要再次进行身份验证。有没有办法在内置 .Open() 方法使用的 HTTP 请求上强制标头?
    • 我不知道 Word 在通过 HTTP 打开文档时会发送哪些标题,以及它们是否包含 cookie。您可以随时使用 Fiddler 或类似工具进行检查。最坏的情况是,您可以再次使用 xmlhttp 对 URL 执行 GET,然后将文档保存到临时目录。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2020-10-14
    • 2019-08-15
    相关资源
    最近更新 更多