Text in Spalten ala M$ Excel

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Gast

Beitrag von Gast » Di, 20.04.2004 12:09

ach ne muß ich doch nicht machen... chef meinte nicht nötig... :lol:
bastel ich fix nochn dialogfeld komentiere aus und sortiere ein wenig...

Toxitom
********
Beiträge: 3483
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom » Di, 20.04.2004 13:47

Hallo Gast,

trotzdem noch ein Tipp: Wenn du mal in Basic nicht weiterweisst:

Dann lass dir einfach die Objekteigenschaften und -Methoden anzeigen:

Code: Alles auswählen

msgbox  <objekt>.dbg_properties   ' die Eigenschaften
msgbox  <objekt>.dbg_methods     ' die Methoden
So hangelt man sich dann von Objekt zu Objekt und und findet normalerweise alles, was man sucht. So mache ich das auch und habe schon viele, viele Stunden damit verbracht :wink:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Gast

Beitrag von Gast » Di, 20.04.2004 14:06

ahhhh :idea: danke!!!
komm schon wieder nicht weiter... und zwar

Code: Alles auswählen

REM  *****  BASIC  *****

sub main									'start und laden des formulars
Dim Dlg As Object
DialogLibraries.LoadLibrary("TextInSpalten")
Dlg = CreateUnoDialog(DialogLibraries.TextInSpalten.textdialog)
Dlg.Execute()
Dlg.dispose()
end sub

Sub selektierteZellen 						'überprüfung der auswahl
    Dim calcDokument as Object 
    Dim selektion as Object 
        calcDokument = ThisComponent 
        selektion = calcDokument.getCurrentSelection() 
        
    If IsNull( selektion ) then 
      
    Elseif selektion.supportsService("com.sun.star.sheet.SheetCell" ) then 
           Einzeln                                   

    Elseif selektion.supportsService("com.sun.star.sheet.SheetCellRange" ) then 
           Zellbereich 
 EndIf
End Sub


Sub Einzeln 								'wenn eine zelle ausgewählt wurde
	Dlg = CreateUnoDialog(DialogLibraries.TextInSpalten.textdialog)
    oDoc=thisComponent 
    oCelle=oDoc.getCurrentSelection() 		'feststellen der aktuellen auswahl 
    inhalt=oCelle.getstring					'auslesen des strings
    msgbox Dlg.getControl("edZeichen").text 
    if (inhalt <> "") then
    atext=split(inhalt, Dlg.getControl("edZeichen").text) 				'teilen 
    oZellPos=oCelle.getCellAddress() 		'feststellen der position 
    reihe=oZellPos.row 						'reihe
    spalte=oZellPos.column 					'spalte
    tabelle=oZellPos.sheet 					'tabelle
    oSheet=oDoc.sheets(tabelle)
     for i=lBound(atext()) to ubound(atext()) 
        oSheet.getCellByPosition(spalte+i,reihe).string=trim(atext(i)) 'schreiben des geteilten strings 
    next
    Endif
End Sub

Sub Zellbereich
	Dlg = CreateUnoDialog(DialogLibraries.TextInSpalten.textdialog)
	Dim oDocument as Object
	Dim oView as Object
	Dim oSheet as Object
	Dim oSelection as Object
	Dim oCell as Object
	Dim oRangeAddress as New com.sun.star.table.CellRangeAddress
	oDocument = ThisComponent
	oSheet = oDocument.Sheets.getByIndex(0)  
	oView = oDocument.CurrentController
	oSelection = oView.getSelection
	oRangeAddress = oSelection.getRangeAddress
	oCell = oSheet.GetCellByPosition(oRangeAddress.StartColumn, oRangeAddress.StartRow)
	'anzahl der zellen bestimmt
	Doc = thisComponent
	Sheet = Doc.Sheets(0)
	for x=oRangeAddress.StartRow to oRangeAddress.StartRow+oSelection.Rows.Count-1
 		Cell = Sheet.getCellByPosition(oRangeAddress.StartColumn, x)
 		inhalt=Cell.getstring
 			if (inhalt <> "") then
 			atext=split(inhalt, Dlg.getControl("edZeichen").text) 
 			ZellPos=Cell.getCellAddress() 
    		reihe=ZellPos.row 
    		spalte=ZellPos.column 
   			tabelle=ZellPos.sheet 
    			for i=lBound(atext()) to ubound(atext()) 
     				Sheet.getCellByPosition(spalte+i,reihe).string=trim(atext(i)) 
   				 next i
       		endif
   next x
End Sub
Dlg.getControl("edZeichen").text wobei edZeichen das eingabefeld auf dem formular textdialog ist... leider zeigt er mir weder was an noch liest er das aus :cry:

Toxitom
********
Beiträge: 3483
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom » Di, 20.04.2004 14:32

Hey Gast (hast du eigentlich auch einen Namen?)

also, wenn das dein Code ist, ist der für mich ein wenig unübersichtlich und - wie ich glaube - hat einige strukurelle Fehler.

Was soll die sub "main"? Einen Dialog öffnen und gleich wieder schliessen?
"main" ist kein besonderes Schlüsselwort. Wenn du Variablen gundsätzlich definieren willst - was übrigens sinnvoll wäre, z.B. Dlg, oDoc, evt. auch oCelle...- dann kannst du das am Anfang des gesamten Moduls, also vor dem ersten sub, tun. Dann gelten die Variablen für alle Subs oder Funktionen.

Mir fehlt jetzt einfach die Vorgehensweise: Wann wird der Dialog aufgerufen? Aus der Sun "SelektierteZellen" -> "einzeln" ? in dieser Sub wird Dlg neu definiert, aber nicht ausgeführt?
Bekommst du eigentlich irgendwelche Fehlermeldungen?

Leider kann ich den Code nicht teten, da mir natürlich dein Dialog fehlt. Handelt es sich bei Feld "edZeichen" denn auch um ein Textfeld? Numerische Felder haben keine Texteigenschaft, sondern eine Value-Eigenschaft.

Wenn du nicht weiterkommst, kannst du mir die Datei mal schicken (als pm) , dann kann ich mehr sagen.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Gast

Beitrag von Gast » Di, 20.04.2004 14:42

ich hab noch keinen namen weil ich (noch) nicht angemeldet bin (hole dies aber nach...)
also die sub main öffnet das dialogfeld dort befindet sich ein label ein textfeld (edZeichen) und ein button... gibt man das zeichen ein und klickt auf den button wird sub selektierteZellen ausgeführt dort wird überprüft ob es sich um ein einzelnes feld oder um mehrere handelt... und dementsprechend sub einzeln oder sub zellbereich aufgerufen , ich erkläre jetzt an sub einzeln weiter...
es wird nun versucht den text aus dem eingabefeld auszulesen (was irgendwie nicht funktioniert :( ) und dann wird der text geteilt usw... hoffe es ist halbwegs verständlich...

Toxitom
********
Beiträge: 3483
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom » Di, 20.04.2004 15:16

Hallo Gast (ok, noch nicht angemeldet, aber einen Namen wirst du doch trotzdem schon haben? Einfach mit unterschreiben!)

OK, einigermassen verstanden. Dann kommentier mal die Zeile in der Sub "Einzeln" aus, die die mit Dlg beginnt (also die zweite Zeile) und setze deine erste Zeile in der Sub "main" (Dim Dlg as object) mal vor die Sub main.

Dann sollte es eigentlich funktionieren.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Gast

Beitrag von Gast » Mi, 21.04.2004 10:38

funktioniert jetzt komischerweiße alles... hab

Code: Alles auswählen

Dim Dlg As Object 
jetzt global gesetzt und dann funzt das..

rip

Beitrag von rip » Sa, 05.06.2004 13:59

Hi,
Code find ich zu wenig flexibel und fehleranfällig:
Versuchts doch mal mit markieren, kopieren, in Texteditor pasten, markieren, kopieren und wieder in eine Calc-Zelle pasten. Dann kommt der Import-Wizard von OpenOffice zum Zuge und man kann prima einstellen was man wohin haben möchte-inkl. Vorschau!

Gruß
Steffen

Antworten