【问题标题】:Copy from MS Word document to a web page input box从 MS Word 文档复制到网页输入框
【发布时间】:2010-09-28 08:52:44
【问题描述】:

在已经打开的word文档中选择所有文本
将所选文本复制到剪贴板
检查默认浏览器在正确的网址打开
如果未在网址“http://thisaddress.com”打开默认浏览器
将焦点放在浏览器上 将剪贴板文本粘贴到名为“input1”的输入框中

或以其他方式将 MSword 文档内容获取到网页输入?

目前的工作流程包括秘书登录网站,然后填写网络表单,切换到他们打开的 MS Word 文档,全选,复制 WP 文档,然后返回网络表单并粘贴到输入框中,然后点击提交。理想情况下,我想做的是在 MS Word 中有一个按钮,该按钮将浏览器打开到正确的网页,然后将文档复制并粘贴到页面上的正确输入框中(实际上它将是唯一的 textarea 表单字段)。

MS Word VBA 代码是:

Option Explicit

Enum W32_Window_State
    Show_Normal = 1
    Show_Minimized = 2
    Show_Maximized = 3
    Show_Min_No_Active = 7
    Show_Default = 10
End Enum

Private Declare Function ShellExecute Lib "shell32.dll" _
    Alias "ShellExecuteA" (ByVal hWnd As Long, _
    ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Function OpenURL(URL As String, WindowState As W32_Window_State) As Boolean

' Opens passed URL with default application, or Error Code (<32) upon error

    Dim lngHWnd As Long
    Dim lngReturn As Long

    lngReturn = ShellExecute(lngHWnd, "open", URL, vbNullString, _
        vbNullString, WindowState)

    OpenURL = (lngReturn > 32)
End Function

Sub TestMacro()
  Application.ActiveDocument.Select
  Selection.Copy
  OpenURL "http://localhost:8500/index.cfm?wordContent=" & Selection, W32_Window_State.Show_Maximized
End Sub

在冷熔处理表格中

<html>
<head>
</head>

<body>
<form id="form1">
    <Textarea ID="txtArea" rows=6><cfoutput>#url.wordContent#</cfoutput></textarea>
</form>

</body>
</html>

只是想弄清楚如果一个新的浏览器窗口已经打开,如何不打开它。

【问题讨论】:

  • 网页表单地址是什么?
  • 您的解决方案中是否包含 Web 应用程序?可以修改吗?
  • 我用更多线索更新了我的答案,检查一下。

标签: vba ms-word


【解决方案1】:

如果您可以修改网络应用程序,您可以执行以下操作:

  1. MS-Word:将内容复制到剪贴板。
  2. MS-Word:打开网址为“http://thisaddress.com/SomePage?pasteClipboard=true”
  3. SomePage:如果查询字符串参数 pasteClipboard == true,则添加一个 javascript 函数以将剪贴板数据获取到您的表单字段中。

更新:

在您的宏中,您只需调用 Selection.Copy,并使用默认浏览器打开 URL,请检查此链接 http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_23225744.html

使用上一个链接中的代码,我制作了一个测试宏:

Sub TestMacro()
  Application.ActiveDocument.Select
  Selection.Copy
  OpenURL  "http://thisaddress.com/SomePage?pasteClipboard=true", W32_Window_State.Show_Maximized
End Sub

我希望这会有所帮助。

更新 2:

只需使用W32_Window_State.Show_Default,这是完整的宏:

Option Explicit

Enum W32_Window_State
    Show_Normal = 1
    Show_Minimized = 2
    Show_Maximized = 3
    Show_Min_No_Active = 7
    Show_Default = 10
End Enum

Private Declare Function ShellExecute Lib "shell32.dll" _
    Alias "ShellExecuteA" (ByVal hWnd As Long, _
    ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Function OpenURL(URL As String, WindowState As W32_Window_State) As Boolean

' Opens passed URL with default application, or Error Code (<32) upon error

    Dim lngHWnd As Long
    Dim lngReturn As Long

    lngReturn = ShellExecute(lngHWnd, "open", URL, vbNullString, _
        vbNullString, WindowState)

    OpenURL = (lngReturn > 32)
End Function

Sub TestMacro()
  Application.ActiveDocument.Select
  Selection.Copy
  OpenURL "http://thisaddress.com/SomePage?pasteClipboard=true", W32_Window_State.Show_Default
End Sub

【讨论】:

  • 是的,网络应用程序在我的控制之下。请问还有1和2的线索吗?
  • 非常接近,感谢您的帮助。每次都会打开一个新的浏览器窗口。有没有办法对此进行修改,以便仅在浏览器尚未打开时才打开新浏览器。
  • 我认为 W32_Window_State.Show_Default 是您正在寻找的,无论如何我用完整的宏代码更新了答案。
  • 我测试了所有 W32_Window_State 选项,但不幸的是它们都打开了一个新的浏览器窗口。我不知道是否能够修改该功能以检查浏览器窗口是否已打开,如果已打开,请转到 URL
  • 当我使用 W32_Window_State.Show_Default 时,URL 在同一个 IE 浏览器窗口中打开,但在不同的选项卡中,转到 [工具>Internet 选项>选项卡>设置>从其他程序打开链接:(当前选项卡或窗口)] 使其在当前选项卡中打开,[工具>Internet选项>高级>设置>恢复窗口以启动快捷方式(关闭选项卡式浏览时)]中还有另一个选项。底线是,使用 shell 执行只是一个起点 - 其余的取决于目标应用程序(本例中为浏览器)。
【解决方案2】:

另一种选择是研究使用控件从 Word 内部控制 Internet Explorer。

Here 就是一个例子。

注意,这只适用于 IE(除非有 Firefox 等的 dll 版本)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多