Paste unformatted Text from the clipboard

From The Document Foundation Wiki
< Macros‎ | Writer
Jump to: navigation, search

Description

This macro pastes content from the clipboard as unformatted texts after removed the line breaks and styling.
To use this macro in an efficient way, you should add a keyboard short cut for the sub "insert_Clpboard_Text_in_Writer" at Extras ▸ Customize: keyboard.

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

Code

REM  *****  BASIC  *****
'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 insert_Clpboard_Text_in_Writer
dim sText As string
  sText= (getClipboardText)
  'Replace line breaks with white spaces. 
  sText = Replace (sText,Chr(10)," ")
  
  'Replace paragraph breaks with white spaces.
  sText = Replace (sText,Chr(13)," ")
  'Paste in Writer
  Write_Cursor_Position (sText)
end sub
'--------------------------
' The sub "Write_Cursor_Position" is used from: http://www.oooforum.org/forum/viewtopic.phtml?t=75409
' Paste text in Writer at the position of the cursor
Sub Write_Cursor_Position (sText as String)
Dim oViewCursor as object
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

' get the text from the clipboard and removes formatting
Function getClipboardText () AS String
dim oClip as object ,oConverter as object
dim oClipContents as object ,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