Text über mehrere Spalten einfügen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Ich kann den Fehler nicht nachvollziehen, tritt der nur bei einzelnen (auch mehrstelligen) Zahlen, oder auch bei Text ohne ; auf ?
Ansonsten würde ich dir empfehlen diese Sub nicht auf Strg+V zu legen, weil Strg ziemlich nah bei der shift-Taste liegt!
___
Füg mal vor der angemeckerten Zeile ein:
On Error goto ErrorHandler

und oberhalb von 'End Sub' die beiden Zeilen:
ErrorHandler:
thiscomponent.currentselection().formulalocal = getclipboard

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
AndreasB.
***
Beiträge: 55
Registriert: Di, 27.01.2009 20:21

Re: Text über mehrere Spalten einfügen

Beitrag von AndreasB. »

Hallo Karo,

also bei folgenden Zahlen tritt es auf:
123
12345

Also eigentlich bei allen.
Es sind nur diese Zahlen, ohne ein ;

Einfach 12345 in die Zwischenablage und dann einfügen.

Ich mache derzeit eigentlich alles mit der STRG-V beim einfügen.
Das geht sehr schnell. Und wenn ich mich hier einen anderen Buchstaben verwende,
dann muss ich mich schon wieder verkopfen, wo ich es so mache, und wo nicht.

Oder geht eine Abfrage mit rein, dass wenn kein ; vorkommt, dass dann ganz normal
eingefügt wird, ohne dass der ganze Code durchlaufen wird?

Gruß
Andreas
AndreasB.
***
Beiträge: 55
Registriert: Di, 27.01.2009 20:21

Re: Text über mehrere Spalten einfügen

Beitrag von AndreasB. »

Hallo Karo,

sorry, habe die Code-Erweiterung ganz übersehen.

Wenn ich das gemacht habe, dann wird auch die Zahl wieder eingefügt.
Aber die Aufteilung funktioniert nicht mehr richtig. Es wird zwar noch
über die Spalten verteilt, aber in der ersten Spalte steht alles mit dabei.

... ich glaube ich weis, wie du es nachvollziehen kannst.

Kopiere mal irgend eine Zelle vom Calc-Dokument und füge es dann mit
dem Makro ein. Dann kommt die Fehlermeldung.

Wenn ich es von einer externen Datei einfüge, dann kommt die Meldung
nicht und das einfügen geht auch. Es hat also gar nichts damit zu tun,
ob es Zahlen sind, oder ein Text.

Gruß
Andreas
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Tut mir leid bei der Fragestellung kann ich dir nicht weiterhelfen, der OOo-interne Zwischenspeicher kann so nicht übertragen werden.
Freunde dich mit zwei verschiedenen Tastenkombis an, und/oder frag nochmal im Basic-forum an wie man interne - und Betriebssystemzwischenablage unterscheiden kann.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
AndreasB.
***
Beiträge: 55
Registriert: Di, 27.01.2009 20:21

Re: Text über mehrere Spalten einfügen

Beitrag von AndreasB. »

Hallo Karo,

kein Problem.
Das was du mir gemacht hast, ist schon super.
Wenn dir doch noch was einfällt, einfach melden.

Danke noch mal.

Gruß
Andreas
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Mir ist noch was brauchbares eingefallen,-- bei einem Fehler wird schlicht aufgezeichneter Code der Aktion: "Einfügen" ausgeführt. Ich fasse hier nochmal alles zusammen:

Code: Alles auswählen

sub clipboard_split_and_paste
'15.3.2009 http://de.openoffice.info/viewtopic.php?f=2&t=23238
'Makro zum Einfügen aus der Zwischenablage
'in mehrere Spalten
'unter Benutzung der Function 'GetClipboard → siehe dort

dim osheet as object
dim nlines% , maxs% , startsp% , startze% , endsp% , endze%

tr = ";" 'Spaltentrenner

'die Zwischenablage...
alines() = split( getclipboard,chr(10))'..in Zeilen splitten.
'unter Windows geht auch: ...,chr(13)) ?

On Error goto ErrorHandler
nlines = ubound(alines())'Anzahl der Zeilen Null-basiert
dim iline(nlines)

for iz = 0 to nlines
   'Zeilenweise in Array splitten..
   iline(iz) = split( alines(iz) , tr )
   '...und maximal benötigte Spaltenanzahl ermittteln
   if maxs < ubound( iline(iz) ) then
      maxs = ubound( iline(iz) )
   endif
next iz
for iz = 0 to nlines
	atmpline = iline(iz)
	redim preserve atmpline(maxs)
	for io = ubound(iline(iz))+1 to maxs
		atmpline(io) = ""
	next io
	iline(iz) = atmpline()
next iz

'Startzelle zum Einfügen ist die  aktuell selektierte Zelle
with thiscomponent.currentselection().rangeaddress
   osheet = thisComponent.sheets(.sheet)
   startsp = .startcolumn
   startze = .startrow
end with

endsp = startsp + maxs
endze = startze + nlines

'Zielbereich festlegen
ozielbereich = osheet.getcellrangebyposition( startsp , startze , endsp , endze )

'setformulaarray statt setdataarray überschreibt nicht die Formatierungen.
ozielbereich.setdataarray(iline())
ochange = ozielbereich.createReplaceDescriptor()
	ochange.searchString = "^[0-9]"
	ochange.ReplaceString = "&" 
	ochange.SearchRegularExpression = true
	ozielbereich.replaceall(ochange)
	
	ochange.searchString = ",[0-9]+$"
	ochange.ReplaceString = "&€" 
	ochange.SearchRegularExpression = true
	ozielbereich.replaceall(ochange)
Exit sub
ErrorHandler:
paste_dispatcher

end sub

'entnommen aus "Makros für OOo" http://www.galileocomputing.de/1938?GPP=ooo
function GetClipboard
   On Error goto ErrorHandler
   Dim ClipBoardHandle as Object, DataObj as object
   Dim DataTypSeq() as object, sClipBoardString as String
   
   ClipBoardHandle = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
   DataObj = createUnoService("com.sun.star.datatransfer.XTransferable")
   DataObj = ClipBoardHandle.getContents()
   DataTypSeq = DataObj.getTransferDataFlavors()
   sClipBoardString = DataObj.getTransferData(DataTypSeq(0))
   getClipboard = sClipBoardString
   Exit function
   REM Wenn die Zwischenablage Bilder oder Objekte enthält
   REM oder leer ist:
   ErrorHandler:
   GetClipboard = ""
end function

sub paste_dispatcher
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub
Korrektur eingefügt: "Exit Sub"

Gruß Karo
Zuletzt geändert von Karolus am Mo, 16.03.2009 14:28, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
AndreasB.
***
Beiträge: 55
Registriert: Di, 27.01.2009 20:21

Re: Text über mehrere Spalten einfügen

Beitrag von AndreasB. »

Hallo Karo,

das Einfügen funktioniert jetzt, aber wenn ein Text zum Splitten mit dabei ist,
wir der ganze Text in die erste Spalte eingefügt und zusätzlich auf die anderen
Spalten aufgeteilt.

Da muss irgendwo noch ein kleiner Fehler sein.

Gruß
Andreas
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
setze in der 3.letzten Zeile (in die Zeile oberhalb von: ErrorHandler:)
Exit sub
Entschuldige hab ich vergessen.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
AndreasB.
***
Beiträge: 55
Registriert: Di, 27.01.2009 20:21

Re: Text über mehrere Spalten einfügen

Beitrag von AndreasB. »

Hallo Karo,

funktioniert alles wunderbar.
Eine Frage hätte ich noch: Ist es möglich, dieses Makro nur in einer Calc-Tabelle
zu verwenden? Also das Makro und auch die Tastenzuweisung.

Vielleicht geht das ja sogar, dass das Makro und die Tastenzuweisung in der
Calc-Tabelle gespeichert wird.

Gruß
Andreas
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Den Code könntest du schon im Dokument (genauer in einem Basic-modul des Dokuments) speichern - bringt aber nichts da die Tastenkombi mindestens allgemein für Calc gilt und dann meckert wenn das Dok geschlossen ist.

Also wenns denn so sein muss, ruf mit der Tastenkombi eine kleines "Entscheidungsmakro" auf:

Code: Alles auswählen

sub split_and_paste_or_paste_only
if thiscomponent.url = converttourl("pfad\zu\deinem\spezziellen\dok.sxc") then
 clipboard_split_and_paste
else
 paste_dispatcher
end if
end sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten