使用VBScript将未格式化的纯文本复制到剪贴板

时间:2014-01-15 11:03:52

标签: vbscript ms-word clipboard

我在我的VBScript中使用以下函数将字符串复制到剪贴板而不使用外部clip命令(由于安全策略,该命令不能并且无法安装):

Function CopyToClipboard(sText)
    Dim oWord : Set oWord = CreateObject("Word.Application")
    With oWord
        .Visible = False
        .Documents.Add
        .Selection.TypeText sText
        .Selection.WholeStory
        .Selection.Copy
        .Quit False
    End With
    Set oWord = Nothing
End Function

问题是被复制的字符串带有“normal.dot”模板继承的标准格式。

鉴于我有Word 2003,这种格式是Times New Roman,12pt和黑色。因此,当它粘贴到电子邮件或文档中时,格式与现有内容不匹配。

有没有办法删除剪贴板中字符串的格式?

1 个答案:

答案 0 :(得分:3)

在玩了一下后,我开发了一个不使用Word对象模型的解决方案,但是将未格式化的文本复制到剪贴板 - 这就是我需要做的事情:

Function CopyToClipboard(sText)
    ' Create temporary text file to avoid IE clipboard warnings
    Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
    Dim sTemp : sTemp = fso.GetSpecialFolder(2) & "\" & fso.GetTempName
    Dim oFile : Set oFile = fso.CreateTextFile(sTemp, True)
    oFile.Write "This file can be safely deleted"
    oFile.Close
    Set oFile = Nothing

    ' Start Internet Explorer in the local zone
    Dim oIE : Set oIE = CreateObject("InternetExplorer.Application")
    oIE.Visible = 0
    oIE.Navigate2 sTemp
    Do
        WScript.Sleep 100
    Loop Until oIE.Document.ReadyState = "complete"

    ' Copy contents to clipboard
    oIE.Document.ParentWindow.ClipboardData.SetData "text", sText

    ' Clean up
    fso.DeleteFile sTemp
    Set oIE = Nothing
    Set fso = Nothing
End Function

此代码使用Internet Explorer访问剪贴板的功能,以便粘贴sText的内容。您会注意到about:blank并未用作起始页面,这是因为它会生成以下警告:

enter image description here

为了解决这个问题,我们在本地创建一个临时文件(带有一些副本以表明它是良性的),然后导航到这个文件。因此,Internet Explorer会在"本地Intranet"中处理此页面。区域并允许访问剪贴板而不生成弹出确认。