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
Unzulässiger Wert oder Datentyp. Index außerhalb des definierten Bereichs.
Diese Fehlermeldung kann ich auf keine Weise mit diesem Makro in Calc provozieren, wie machst du das?
... jetzt habe ich es gerade an meiner "echten" Tabelle ausprobiert. Hier passiert gar nichts,
wenn ich das Makro starte. Geht dieses Makro nur wenn die Tabelle leer ist?
In einem leeren Dokument gibts nichts zu splitten.
Es splittet in der ersten Tabelle A1:A100
Hast du den Code in der Standard-bibliothek eines Dokumentes abgelegt?
Wenns allgemein und nicht nur in diesem Dok laufen soll dann leg es in eine Bibliothek unterhalb von 'meine Makros ..'

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,

die Fehlermeldung bringt er immer, wenn ich das Makro aufrufe.
Die Aufteilung erfolgt dann zwar, aber die Fehlermeldung kommt.

Das mit der Zeile ist mir auch aufgefallen. Das dumm ist nur, dass ich
momentan in der 1300sten Zeile bin. Und das wird immer mehr.
Und so wie ich das sehe, geht er von oben bis unten die Spalte durch
und ersetzt hier alle. Das dauert jetzt bei 1300 Zeilen schon eine Weile.

Geht es nicht auch so, dass der Inhalt der Zwischenablage verwendet und
zerlegt wird, und dieser dann ab der Zelle, auf der sich der Curso befindet
den Text einbindet?

Mir ist auch gerade noch aufgefallen, dass die Formatierungen überschrieben
werden. In der 3. Spalte ist ein Datum, das er dann einfach umdreht (Monat wird
mit Tag getauscht). Die 4. Spalte ist normalerweise als Währung formatiert. Dies
wird überschrieben und als normalen Text eingefügt.

Es wäre toll, wenn du mir da helfen könntest.

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

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo Andreas
Teste mal:

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)) ?
 
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

dim ergarray( nlines , maxs )'Ergebnissarray dimensionieren...

for iz = 0 to nlines '..und Zeilen- und ...
	for isp = 0 to maxs '...spaltenweise befüllen...,
		if isp > ubound(iline(iz)) then
		'...auch explizit Felder ohne Inhalt.
			ergarray(iz,isp)= ""
		else
			ergarray(iz,isp)= iline(iz)(isp)
		end if
	next isp
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.setformulaarray(ergarray())

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
Mit einem Dank an Toxitom

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,

Danke für deine Hilfe.
Folgende Daten habe ich in der Zwischenablage:
test1;stest2;test3

Beim Start des Makros kommt folgende Fehlermeldung:
BASIC-Syntaxfehler. Unerwartetes Symbol:(.

und weist auf folgende Zeile:
ergarray(iz,isp)= iline(iz)(isp)

Und die ")" bei "(iz)" ist markiert.

Es wird nichts eingefügt.

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

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Tja, was soll ich sagen, bei kommt keine Fehlermeldung, vielleicht kann deine 1er version noch nicht in der Form 2dimensionale Arrays referenzieren ?
Wie wärs mit einem Update?
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)
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Funktioniert diese Variante:

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)) ?

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.setformulaarray(iline())

end sub
?
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,

mit welcher Version arbeitest du?
Das mit dem Update auf die aktuelle Version habe ich schon öfters in anderen Foren durchgekaut.
Das Problem liegt am langsamen speichern in der Verion ab 2.x. Und aus diesem Grund arbeite
ich weiterhin mit der 1.1.5

Die neue Variante funktioniert leider auch nicht. Es kommt folgende Fehlermeldung:
Unzulässiger Wert oder Datentyp. Idex außerhalb des definierten Bereichs.

Und er springt in folgende Zeile:
nlines = ubound(alines())'Anzahl der Zeilen Null-basiert

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

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
ich hab bei der letzten Antwort die 'Function getClipboard' nicht nochmal reinkopiert, kopier diese bitte aus der vorletzten Antwort raus und füg sie komplett unterhalb der Sub ein.
Dann teste bitte nochmal !
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,

super, funktioniert.
Das einzige was jetzt noch ist, dass die Formatierung verloren geht.
Aus dem Datum 12.03.09 wird 09.12.09 und in der Spalte, die als
Währung formatiert ist, wird der Wert als Text eingefügt (mit einem ' vorne dran).

Hast du dafür noch eine Lösung?

Gruß
Andreas

P.S. Vielen Dank noch mal für deine Hilfe und deine Geduld.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Gut jetzt kommen wir endlich voran, poste mal 10 Zeilen typischen Zwischenablageinhalt und beschreibe was aus jeder "Spalte" werden soll.
Berichte bei der Gelegenheit was passiert wenn du die vorletzte Zeile in der Sub.. änderst in:
ozielbereich.setDataarray(iline())
(bitte keine Fehlermeldungen wegen Falsch-kopieren 8) )

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,

der Import setzt sich so zusammen:
Name;SSL;Datum;Betrag;Text

Das Feld SSL und Text ist nicht immer belegt. Hier ist halt dann ein Semikolon nach dem
anderen. Aber das funktioniert ja.

Hier mal drei Beispiele:
Max Mustermann;SSL;12.03.09;35,90;Das ist der Text
Max Mustermann;;09.03.09;48,60;Das ist der Text
Max Mustermann;SSL;07.03.09;125,80;

Nachdem ich die Zeile so geändert habe, wird zwar das Datum nicht mehr umgedreht, aber als
Text importiert. Das ist nicht gut, da ich dann nicht mehr mit dem Datum arbeiten kann.

Der Betrag wird auch noch als Text importiert (also mit einem ' vorangestellt).

Fehlermeldungen hat es nicht gegeben.

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

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Lass die Zeile:
ozielbereich.setDataarray(iline()) so wie sie hier steht und füg direkt unterhalb folgendes ein:

Code: Alles auswählen

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)
Ich hoffe das wars!
Gruß Karo
Zuletzt geändert von Karolus am So, 15.03.2009 19:31, 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,

super, jetzt funktionert es so, wie es sein soll.
Ich teste es jetzt mal die nächsten Tage, aber das muss so passen.

Vielen, vielen Dank.

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

Re: Text über mehrere Spalten einfügen

Beitrag von Karolus »

Hallo
Ich hab grad noch einen Fehler in der 4.letzten Zeile oben ausgebessert, in den Searchstring gehört ein + zeichen statt des ?zeichens:
ochange.searchString = ",[0-9]+$"

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,

ich möchte diesen Import eigentlich jetzt auf STRG-V legen und diesen immer verwenden.
Wenn ich nur eine Zahl (1234) einfüge, kommt folgende Fehlermeldung:

Unzulässiger Wert oder Datentyp. Index außerhalb des definierten Bereichs.

Folgende Zeile wird markiert:
nlines = ubound(alines())'Anzahl der Zeilen Null-basiert

Kann man das ändern, so dass alle Zeichen funktionieren?

Gruß
Andreas
Antworten