Seite 1 von 1

Re: Makro für Datenimport, calc und Diagramme

Verfasst: So, 16.12.2007 21:15
von komma4
Ich hoffe, Dir kann folgendes Makro helfen Dein Vorhaben umzusetzen:
insertCSV2Calc
insertCSV2Calc hat geschrieben:Einfügen der Daten einer CSV-Datei in eine Tabelle einer Calc-Datei.

Dokumentation im ODT-Format. Modul leistet als Beispiel den Import gleichartig strukturierter, durch ein Trennzeichen getrennter Daten in eine neue Tabelle einer Calc-Datei. Durch ein mitgeliefertes Hilfsmakro können die nötigen Filteroptionen einfach ermittelt werden.
Kommst Du damit zurecht?

Re: Makro für Datenimport, calc und Diagramme

Verfasst: Di, 18.12.2007 11:00
von chrk
fischerl hat geschrieben:- Wie kann ich aus "10.12.2007 13:55" nur den Tag auslesen und mit einem anderen Tag ohne Uhrzeit vergleichen?
Sorry, Ich habe keine Makrotipps für Dich, aber Du könntest Deiner Importtabelle ein Datums- und ein Zeitfeld zufügen und aus dem Zeitstempel-Feld per Formel auslesen:
Datum: =GANZZAHL(A1), als Datum formatieren,
Zeit: =REST(A1;1), als Uhrzeit formatieren.

Re: Makro für Datenimport, calc und Diagramme

Verfasst: Di, 18.12.2007 12:19
von komma4
Lars,

bitte bei weiteren Fragen pro Frage ein neues posting mit aussagekräftigem Titel einstellen; Danke.

* Iterieren über alle Zellen einer Spalte:

Code: Alles auswählen

iSpalte = 1  ' Spalte B
STARTzeile = 1  ' Zeile: 2
ENDEzeile  = 99  ' Zeile 100

for i = STARTzeile to ENDEzeile 
 oZeilenZelle = oSheet.getCellByPosition( iSpalte, i ) 
next i

* letzte Zeile finden
Sheets.Rows.Count liefert Dir immer die Anzahl der Zeilen (bis 1.1.x waren es noch 32xxx!)
Ich verwende zur Ermittlung einer "letzten gefüllten Zeile" diese Funktion:

Code: Alles auswählen

Function GetLastUsedRow(oSheet as Object) as Integer
Dim oCell As Object
Dim oCursor As Object
Dim aAddress As Variant
	oCell = oSheet.GetCellbyPosition(0, 0)
	oCursor = oSheet.createCursorByRange(oCell)
	oCursor.GotoEndOfUsedArea(True)
	aAddress = oCursor.RangeAddress
	GetLastUsedRow = aAddress.EndRow
End Function
Hole Dir Xray, lade dessen zwei Bibliotheken, und prüfe dann selbst, was Du bekommst

Code: Alles auswählen

oSheet = ThisComponent.Sheets.getByName( "Tabelle1" ) 
xray GetLastUsedRow 

* nur Tag auslesen
mit der Calc-Funktion TAG()?
Meinst Du wirklich den TAG, oder den DATUMsanteil des Zeitstempels?

* Liniendiagramm
mittels Basic? Keine Ahnung...

Re: Makro für Datenimport, calc und Diagramme

Verfasst: Di, 18.12.2007 14:40
von komma4
Gast hat geschrieben: Hole Dir Xray, lade dessen zwei Bibliotheken, und prüfe dann selbst, was Du bekommst

Code: Alles auswählen

oSheet = ThisComponent.Sheets.getByName( "Tabelle1" ) 
xray GetLastUsedRow 
Muss dann natürlich heissen:

Code: Alles auswählen

xray GetLastUsedRow( oSheet ) 

* Datumsanteil
Wo möchtest Du den Datumsteil eines Zeitstempels ermitteln: aus dem Abfrageergebnis oder der Zelle? In der Zelle steht ein Zeitwert - oder Text?
OOo-Hilfe: DateSerial(Datum)

Re: Makro für Datenimport, calc und Diagramme

Verfasst: Di, 18.12.2007 18:43
von komma4
vergiss das mit der Abfrage - Du importierst ja aus CSV.

Noch einen Tipp:

wenn Du die importierten Daten noch weiter bearbeitest, und es "mehrere Tausend" sind, dann solltest Du mit dem Datenarray arbeiten und dort ändern, bevor Du die Werte in die Tabelle schreibst.

Das Holen der Werte aus den Zellen benötigt viel mehr Rechenleistung als das Arbeiten im Array (was sich ja eh im Speicher befindet). Die Arraybearbeitung ist zwar nicht einfach, aber hoffentlich verständlich dokumentiert.