Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

CAD
Beiträge: 4
Registriert: Di, 16.10.2018 18:00

Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von CAD » Mi, 17.10.2018 11:02

Hallo,

ich muss mehrmals am Tag aus einer Datenbank eine Tabelle exportieren, bei der in 2 Spalten (B und D) die Zellinhalte als Dezimalzahl ausgegeben werden obwohl es sich eigentlich um Datumswerte handelt, also z.B. 4072018 anstatt 04.07.2018. Das geht technisch nicht anders. Mit Spalte markieren -> Data -> Text in Spalten -> Auf Spalte klicken -> Spaltentyp: Datum (TMJ) kann ich das händisch in das gewünschte Format umwandeln. Jetzt möchte ich das gerne als Makro haben, denn das ist sonst ziemlich aufwändig das die ganze Zeit händisch zu machen. Die Spalten haben immer dieselbe Überschrift.

Kann mir bitte jemand damit helfen? Vielen Dank!

mikeleb
******
Beiträge: 743
Registriert: Fr, 09.12.2011 16:50

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von mikeleb » Mi, 17.10.2018 11:07

Hallo,
das heißt du möchtest per Makro eine csv-Datei in Calc importieren?
Gruß,
mikeleb

CAD
Beiträge: 4
Registriert: Di, 16.10.2018 18:00

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von CAD » Mi, 17.10.2018 11:41

Nein, die Tabelle wird als xls ausgegeben, da muss ich gar nichts ändern. Mit dem Makro möchte ich das, was ich mit Spalte markieren -> Data -> Text in Spalten -> Auf Spalte klicken -> Spaltentyp: Datum (TMJ) händisch machen kann in einem Schritt erledigen.

CAD
Beiträge: 4
Registriert: Di, 16.10.2018 18:00

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von CAD » Mi, 17.10.2018 12:37

Links sieht man wie die Spalte ausgegeben wird, rechts wie sie aussehen soll.

Bild

mikeleb
******
Beiträge: 743
Registriert: Fr, 09.12.2011 16:50

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von mikeleb » Mi, 17.10.2018 22:21

Hallo,
eine mögliche Variante:

Code: Alles auswählen

Sub Main
	Dim datum as long
	odoc=thiscomponent
	otab=odoc.currentcontroller.activesheet
	ocur=otab.createcursor
	ocur.gotoendofusedarea(false)
	n=ocur.rangeaddress.startrow
	obereich=otab.getcellrangebyposition(1,1,3,n)
	adaten()=obereich.getdataarray
	for i=0 to ubound(adaten)
		wert=adaten(i)(0)
		if wert<>"" then
			stext=format(wert,"00\.00\.0000")
			if isdate(stext) then
				datum=cdate(stext)
				adaten(i)(0)=datum
			end if
		end if
		wert=adaten(i)(2)
		if wert<>"" then
			stext=format(wert,"00\.00\.0000")
			if isdate(stext) then
				datum=cdate(stext)
				adaten(i)(0)=datum
			end if	
		end if
		
	next
	obereich.setdataarray(adaten())
	Dim Localformat as new com.sun.star.lang.Locale
    numberformats = odoc.numberformats
    numberformatstring = "TT.MM.JJ"
    numberformatid = numberformats.queryKey(numberformatstring, Localformat, True)
    if numberformatId = -1 then
        numberformatId = numberformats.addNew(numberformatstring,Localformat)
    end if
	otab.columns(1).numberformat=numberformatid
	otab.columns(3).numberformat=numberformatid

End Sub

Gruß,
mikeleb

RPP63

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von RPP63 » Do, 18.10.2018 09:56

Moin!
Wenn es auch eine Hilfsspaltenlösung sein darf, ist es einfach
=WERT(TEXT(A1;"00\.00\.0000"))
(als Datum fortmatiert)

Gruß Ralf

CAD
Beiträge: 4
Registriert: Di, 16.10.2018 18:00

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von CAD » Do, 25.10.2018 09:00

mikeleb hat geschrieben:
Mi, 17.10.2018 22:21
Hallo,
eine mögliche Variante:

Code: Alles auswählen

Sub Main
	Dim datum as long
	odoc=thiscomponent
	otab=odoc.currentcontroller.activesheet
	ocur=otab.createcursor
	ocur.gotoendofusedarea(false)
	n=ocur.rangeaddress.startrow
	obereich=otab.getcellrangebyposition(1,1,3,n)
	adaten()=obereich.getdataarray
	for i=0 to ubound(adaten)
		wert=adaten(i)(0)
		if wert<>"" then
			stext=format(wert,"00\.00\.0000")
			if isdate(stext) then
				datum=cdate(stext)
				adaten(i)(0)=datum
			end if
		end if
		wert=adaten(i)(2)
		if wert<>"" then
			stext=format(wert,"00\.00\.0000")
			if isdate(stext) then
				datum=cdate(stext)
				adaten(i)(0)=datum
			end if	
		end if
		
	next
	obereich.setdataarray(adaten())
	Dim Localformat as new com.sun.star.lang.Locale
    numberformats = odoc.numberformats
    numberformatstring = "TT.MM.JJ"
    numberformatid = numberformats.queryKey(numberformatstring, Localformat, True)
    if numberformatId = -1 then
        numberformatId = numberformats.addNew(numberformatstring,Localformat)
    end if
	otab.columns(1).numberformat=numberformatid
	otab.columns(3).numberformat=numberformatid

End Sub

Hallo, vielen herzlichen Dank, für die zweite Spalte funktioniert das einwandfrei, bei der vierten gibt er aber falsche Daten aus.

mikeleb
******
Beiträge: 743
Registriert: Fr, 09.12.2011 16:50

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von mikeleb » Do, 25.10.2018 10:39

Hallo,
bei der vierten gibt er aber falsche Daten aus
Was bedeutet "falsch"?
Um dafür eine Lösung zu finden, wäre es hilfreich eine Beispieldatei (kein Screenshot) zu haben.
Gruß,
mikeleb

mikeleb
******
Beiträge: 743
Registriert: Fr, 09.12.2011 16:50

Re: Text in Spalten -> Spaltentyp: Datum (TMJ) als Makro

Beitrag von mikeleb » Sa, 27.10.2018 11:02

Hallo,
ich habe den Fehler gefunden (nach markieren, kopieren, einfügen musste natürlich noch der Parameter angepasst werden)
Aus

Code: Alles auswählen

adaten(i)(0)=datum
am Ende der Schleife muss natürlich

Code: Alles auswählen

adaten(i)(2)=datum
werden

Code: Alles auswählen

Sub Main
	Dim datum as long
	odoc=thiscomponent
	otab=odoc.currentcontroller.activesheet
	ocur=otab.createcursor
	ocur.gotoendofusedarea(false)
	n=ocur.rangeaddress.startrow
	obereich=otab.getcellrangebyposition(1,1,3,n)
	adaten()=obereich.getdataarray
	for i=0 to ubound(adaten)
		wert=adaten(i)(0)
		if wert<>"" then
			stext=format(wert,"00\.00\.0000")
			if isdate(stext) then
				datum=cdate(stext)
				adaten(i)(0)=datum
			end if
		end if
		wert=adaten(i)(2)
		if wert<>"" then
			stext=format(wert,"00\.00\.0000")
			if isdate(stext) then
				datum=cdate(stext)
				adaten(i)(2)=datum
			end if	
		end if
		
	next
	obereich.setdataarray(adaten())
	Dim Localformat as new com.sun.star.lang.Locale
    numberformats = odoc.numberformats
    numberformatstring = "TT.MM.JJ"
    numberformatid = numberformats.queryKey(numberformatstring, Localformat, True)
    if numberformatId = -1 then
        numberformatId = numberformats.addNew(numberformatstring,Localformat)
    end if
	otab.columns(1).numberformat=numberformatid
	otab.columns(3).numberformat=numberformatid

End Sub
Gruß,
mikeleb

Antworten