Schleife in Makros einbauen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Schleife in Makros einbauen

von Toxitom » Mi, 02.11.2005 13:56

Hey Virob,
P.S Spendenkonto -> kannst Du mir eine Verbindung angeben?
Meinst du mein Konto??? :wink:

Na ja, ok, ich verstehe schon. Geh einfach auf die Seite des Vereins -> und dort auf Spenden ( http://www.ooodev.org/index.php?ziel=s22&rm=r00 ), da sind alle Angaben zu finden.

Freut mich, dass das Makro gefällt. Den Rest kannst du einfach selbst einbauen.

Viele Grüße
Thomas

Schleife einbauen

von Virob » Mi, 02.11.2005 10:02

Hallo Thomas,

.... was soll ich da sagen? - perfekt - genau wie ich mir das gewünscht habe.
Einfach Super.
Habe noch eine Verknüpfung in der Symbolleiste erstellt und kann nun - danke Deiner Hilfe - perfekt damit arbeiten.

Wenn allenfalls vor er Ausführung des Makros noch ein Hinweis erscheinen würde: " Achtung es werden nachfolgende Zellen überschrieben", dann wäre jeder Benutzer gewarnt - aber das muss nicht sein.
Aber auch so - das Makro sollte ins Programm implementiert werden.

Ich möchte mich bei Dir in aller Form bedanken.

P.S Spendenkonto -> kannst Du mir eine Verbindung angeben?

von Virob » Di, 01.11.2005 16:44

Hallo Thomas,

.... wow - das ging aber schnell - ich hoffe ich kann das heute noch ausprobieren und werde morgen eine Rückmeldung machen können

Auf jeden Fall bis anhin ganz grossen Dank

von Toxitom » Di, 01.11.2005 16:16

Hey Virob,
Habe ich Dir die Sachlage verständlich erklärt??
Ja, hast du. Also, fangen wir mal an.
Die erste Problematik ist, zu erkennen, was gerade markiert ist. Ich gehe mal von zwei Möglichkeiten aus:
1. eine einzelne Zelle -> dann wird nur dieser Text umgewandelt.
2. ein (zusammenhängender) Zellbereich -> jetzt werden alle Texte der ersten Spalte umgewandelt.

Den Umwandlungsprozess hast du ja schon gehabt, den hab ich soweit übernommen. Der Übersicht bleibt dies eine eigenständige Prozedur. Du startest das Makro "Selection", dann sollte es funktionieren:

Code: Alles auswählen

sub selektion
	oDoc = StarDesktop.getCurrentComponent()
	if not oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
	  msgbox "Dies ist keine Calc-Anwendung", 16, "Fehler"
	  exit sub
	end if
	oZell = oDoc.getCurrentSelection()
	if oZell.supportsService("com.sun.star.sheet.SheetCellRanges") then
		msgbox "Sorry, Mehrfachselektionen werden nicht unterstützt!", 48, "Makro kann nicht gestartet werden"
		exit sub
	elseif oZell.supportsService("com.sun.star.sheet.SheetCell") then
	REM  Cursor befindet sich in einer Zelle oder eine Zelle ist gewählt
	REM  Jetzt Wahl des umgebenden Zellbereiches
		oZellAdr = oZell.CellAddress
		iSheet = oDoc.sheets(oZellAdr.Sheet)
		iColumn = oZellAdr.column    'Index der Spalte
		iRow = oZellAdr.row         'Index der Zeile
		Textsplitten(oZellAdr.Sheet, iColumn, iRow)

	elseif oZell.supportsService("com.sun.star.sheet.SheetCellRange") then
	REM  ein Bereich wurde markiert
		iSheet = oZell.rangeAddress.Sheet
		iStartSp = oZell.rangeAddress.startColumn
		iStartZe = oZell.rangeAddress.startRow
		iEndSp = oZell.rangeAddress.EndColumn
		iEndZe = oZell.rangeAddress.EndRow
		Textsplitten(iSheet, iStartSp, iStartZe, iEndSp, iEndZe)
	else
	  msgbox "kann Arbeitsbereich nicht erkennen", 16, "Fehler"
	  exit sub
	end if
end sub
Hiermit hast du nun die Zell-Adressen(Indices) und kannst weiterarbeiten. Die Funktion, die benötigt wird, heisst "Textsplitten()"

Code: Alles auswählen

Sub TextSplitten(iSheet as integer, _
                 iStartColumn as integer, _
                 iStartRow as long, _
                 optional iEndColumn as integer, _
                 optional iEndRow as long)
	If ismissing(iEndColumn) then iEndColumn = iStartColumn
	if isMissing(iEndRow) then iEndRow = iStartRow
	
	trz="," ' Trennzeichen definieren
	oDoc=thisComponent
	oSheet = oDoc.sheets(iSheet)
	
	For i = iStartRow to iEndRow
		oCelle = oSheet.getCellByPosition(iStartColumn, i)
		'Inhalt der aktiven Zelle
		inhalt=oCelle.getstring
		'werte auf Array aufteilen am Trenner
		atext=split(inhalt, trz)
		'Schleife über alle Array-Inhalte
		'Inhalte in Zellen aktive Zelle und rechts daneben
		'schreiben. Die Funktion trim() entfernt dabei
		'Leerzeichen vor und hinter den jeweiligen Texteinträgen
		for n=lBound(atext()) to ubound(atext())
			oSheet.getCellByPosition(iStartColumn+n,i).string=trim(atext(n))
		next
	next
End Sub 
So, das war es. So sollte es gehen.

Gruss
Thomas

Schleife in Makro einbauen

von Virob » Di, 01.11.2005 14:58

Hallo Thomas,

... ja so schnell geht das - besten Dank

Wir haben teilweise Daten (von Lieferanten etc.) die sind wirr geordnet - mal mit Komma getrennt, mal mit Semikolon etc.
Mal in Spalte A, mal in B -> je nachdem wer diese Daten (Lieferantenseits) in einer Tabelle aufgenommen hat.
Mit importieren *.csv klappt es in der Regel -> aber beim kurchkämmen der Daten wäre ich schon froh, wenn ich dies in der "offenen Lösung" machen könnte. Zellen markieren und Makro die Arbeit übernehmen lassen.
Ganz komfortabel wäre es mit einem Button -> aber daran wage ich ja nicht zu denken.

Je nach Datenmenge -(Import) kann dies schon mal 1'000 Artikel sein, die
durchforstet werden müssen -> und da wäre für mich ein solches Makro schon hilfreich.

Habe ich Dir die Sachlage verständlich erklärt??

Danke für Deine Bemühungen

von Toxitom » Di, 01.11.2005 13:33

Hallo Virob,

(so trifft man sich wieder :D )
Bevor wir an das Makro gehen, zunächst ein paar andere Fragen:
Wo kommen denn die Daten her? Wenn du schreibst, dass in Spalte A die Daten (zeilenweise?) drinstehen, mit Kommas seperiert, a la Excel?

Wenn du diese Daten nämlich via Import aus einer Datei selbst einlädst, dann könntest du diese doch direkt beim Import trennen lassen. Wenn du eine Textdatei (*.txt) liest, so benenne diese vorher um -> in *.csv. Jetzt öffnet sich ein Importdialog und du kannst eine Trennung in verschiedene Spalten vornehmen.

2. Frage: Wie viele Daten stehen in Spalte A? Und welche willst du konvertieren? Alle? Nur die markierten?

Gib mir hierüber noch Auskunft, dann stellen wir das Makro zusammen. Ach ja, wie willst du das Makro starten? durch einen Button im Dokument?

Bis denn
Thomas

Schleife in Makros einbauen

von Virob » Di, 01.11.2005 12:01

Guten Tag

Ich möchte in einer Tabelle (SpalteA) den Text (Werkzeug, Hersteller, Modell, Grösse etc.), der durch Komma getrennt ist (a la Excel) in andere Spalten verschieben.
Da ich von Programmieren Null Ahnung habe habe ich in den Treads gesucht und bin mit untem folgenden Makro fündig geworden.

Das Makro funktioniert (Text mittels Komma in andere Spalten aufteilen) -> ist aus einem Tread kopiert -> wie muss ich nun die Schleife machen, respektive wie sieht die Schleife aus, damit ich die ganze Tabelle und nicht nur eine Zeile abarbeiten kann??

Beim markieren mehrerer Zeilen erscheint ein "Laufzeitfehler" -> was immer das auch heissen mag javascript:emoticon(':(')
Sad
Sad

Könnte mir jemand behilflich sein??

---
Sub Main
trz="," ' Trennzeichen definieren
oDoc=thisComponent
' Werte einlesen
'aktive Zelle erhalten
oCelle=oDoc.getCurrentSelection()
'Inhalt der aktiven Zelle
inhalt=oCelle.getstring
'werte auf Array aufteilen am Trenner
atext=split(inhalt, trz)
'Position der aktiven Zelle erhalten
oZellPos=oCelle.getCellAddress()
'indexe der Reihe, Spalte und der Tabelle
reihe=oZellPos.row
spalte=oZellPos.column
tabelle=oZellPos.sheet
' Werte ausgeben
' aktives Tabellenblatt erhalten
oSheet=oDoc.sheets(tabelle)
'Schleife über alle Array-Inhalte
'Inhalte in Zellen aktive Zelle und rechts daneben
'schreiben. Die Funktion trim() entfernt dabei
'Leerzeichen vor und hinter den jeweiligen Texteinträgen
for i=lBound(atext()) to ubound(atext())
oSheet.getCellByPosition(spalte+i,reihe).string=trim(atext(i))
next
End Sub
---
Danke schon im voraus für Eure Bemühungen

Nach oben