Jump to content

Paste unformatted text from the clipboard without linebreaks or styling

From The Document Foundation Wiki


Description

This macro pastes content from the clipboard as unformatted texts after removing the linebreaks and styling. To use this macro in an efficient way, you can add a keyboard short cut for the sub InsertClipboardTextInWriter() at Extras ▸ Customize: keyboard.

To paste only unformatted text from the clipboard you can use the general macro getClipboardText().

Code

' Copyright (c) 2011 Frieder Delor, Mailto: delorfr@googlemail.com
'
'    This program is free software: you can redistribute it and/or modify
'    it under the terms of the GNU General Public License as published by
'    the Free Software Foundation, either version 3 of the License, or
'    (at your option) any later version.
'
'    This program is distributed in the hope that it will be useful,
'    but WITHOUT ANY WARRANTY; without even the implied warranty of
'    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'    GNU General Public License for more details.
'
'    You should have received a copy of the GNU General Public License
'    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Option Explicit

Sub InsertClipboardTextInWriter()
    Dim sText As String
    sText= (getClipboardText)
    sText = Replace (sText,Chr(10)," ") ' Replace line breaks with white spaces
    sText = Replace (sText,Chr(13)," ") ' Replace paragraph breaks with white spaces
    WriteCursorPosition(sText) ' Paste in Writer
End Sub ' InsertClipboardTextInWriter


Sub WriteCursorPosition(sText as String)
    '''This sub is taken from http://www.oooforum.org/forum/viewtopic.phtml?t=75409'''
    '''Paste text in Writer at the position of the cursor'''

    Dim oViewCursor As Object ' com.sun.star.text.XTextViewCursor
    Dim oText As Object
    oViewCursor = ThisComponent.GetCurrentController.ViewCursor
    If IsEmpty(oViewCursor.Cell) Then
        oText = ThisComponent.text
    Else
        oText = oViewCursor.Cell.Text
    End If
    oText.insertString(oViewCursor, sText, false)

End Sub ' WriteCursorPosition


Function getClipboardText() As String
    '''Returns a string of the current clipboard text'''

    Dim oClip As Object ' com.sun.star.datatransfer.clipboard.SystemClipboard
    Dim oConverter As Object ' com.sun.star.script.Converter
    Dim oClipContents As Object
    Dim oTypes As Object
    Dim i%

    oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
    oConverter = createUnoService("com.sun.star.script.Converter")
    On Error Resume Next
    oClipContents = oClip.getContents
    oTypes = oClipContents.getTransferDataFlavors

    For i = LBound(oTypes) To UBound(oTypes)
        If oTypes(i).MimeType = "text/plain;charset=utf-16" Then
            Exit For
        End If
    Next

    If (i >= 0) Then
        On Error Resume Next
        getClipboardText = oConverter.convertToSimpleType _
            (oClipContents.getTransferData(oTypes(i)), com.sun.star.uno.TypeClass.STRING)
    End If

End Function ' getClipboardText

ODT file to test macro