Daten aus einer andern Datei kopieren!

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

little fingers
**
Beiträge: 22
Registriert: Fr, 12.05.2017 15:31

Daten aus einer andern Datei kopieren!

Beitrag von little fingers » So, 10.02.2019 13:43

Hallo Ihr Lieben!

Ich würde gerne mit Button, also per Makro Daten aus einer CSV-Datei (V:\TXT\L-Statistik-Touren.csv) aus dem Bereich A2:J129)
in den aktuellen Tabellenblatt in den Bereich B43:K170 als unformatierter Text kopieren
1. Geht das überhaupt?
2. Wenn ja, wie könnte man das lösen?

Liebe Grüße

Ingo

Stephan
********
Beiträge: 10972
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus einer andern Datei kopieren!

Beitrag von Stephan » So, 10.02.2019 14:28

2. Wenn ja, wie könnte man das lösen?
z.B. wie in
https://www.wollmux.net/wiki/images/f/f ... chbuch.pdf

Kapitel "3.4.3.1 Einlesen von CSV-Dateien und Daten in Calc-Tabelle schreiben"

beschrieben.


Gruß
Stephan

little fingers
**
Beiträge: 22
Registriert: Fr, 12.05.2017 15:31

Re: Daten aus einer andern Datei kopieren!

Beitrag von little fingers » So, 10.02.2019 15:04

Hallo Stephan ,

vielen Dank für die schnelle Antwort!
Ich das Makro eingefügt und bekomme hier die Fehlermeldung BASIC-Syntaxfehler

sCSVURL = convertToURL(

Gruss Ingo

Stephan
********
Beiträge: 10972
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus einer andern Datei kopieren!

Beitrag von Stephan » So, 10.02.2019 15:20

bitte schaue genau hin, denn die Fehlermeldung ist selbst erklärend, denn es ist von "unerwartetes Symbol" die Rede und eben jenes Symbol ist markiert.

Es ist nur notwendig die typografischen Anführungszeichen:

Code: Alles auswählen

sCSVURL = convertToURL(„D:\Daten\meineCSVDatei.csv“))
gegen normale Anführungszeichen zu ersetzen:

Code: Alles auswählen

sCSVURL = convertToURL("D:\Daten\meineCSVDatei.csv"))


Gruß
Stephan

little fingers
**
Beiträge: 22
Registriert: Fr, 12.05.2017 15:31

Re: Daten aus einer andern Datei kopieren!

Beitrag von little fingers » So, 10.02.2019 15:36

Hi Stephan!

Ich glaube, dass ich hier überfordert bin.
Ich weiss hier gar nicht, wo ich den Quellbereich der CSV (A2:J129) Datei,
den Zielbreich des aktuellen Tabellenblattes (B43:K170 )

Ferner kommen heir wieder Fehlermeldungen auf bei
if NOT Helper.CheckCalcDokument(odoc) Then exit sub
oZelle = Helper.GetFirstSelectedCell(oDoc.getCurrentSelection())

Objektvariable nicht belegt!

Gruss Ingo

Code: Alles auswählen

'/** CSVDateiEinfuegen()
'*************************************************************************.
'* @kurztext fügt die Daten einer CSV-Datei an der aktuellen Zelle beginnend ein
'* Diese Funktion fügt die Daten einer CSV-Datei an der aktuellen
'* Zelle beginnend ein
'*************************************************************************
'*/
sub CSVDateiEinfuegen()
dim oZelle as variant 'Objekt der aktuellen Zelle
dim sZelle as string 'Zellname
dim oTab as object 'aktuelles Tabellenblatt
dim odoc as variant 'aktuelles Dokument
REM Parameter für die Beschreibung der CSV-Datei
dim sFt as string, sDt as string, sTt as string, sTk as string, sZs as string
dim aOpt(6) '7 Werte: FT, DT, TT, TK, ZS, ersteZeile, Feldeinstellung
dim aDaten() 'einzutragenden Daten
oDoc = thisComponent
if NOT Helper.CheckCalcDokument(odoc) Then exit sub
oZelle = Helper.GetFirstSelectedCell(oDoc.getCurrentSelection())
REM Vorgabedaten definieren (würcen üblicherweise über Dialog erfragt!)
sCSVURL = convertToURL("V:\TXT\L-Statistik-Touren.csv")
REM CSV-Parameter Liste -7 Werte: FT, DT, TT, TK, ZS, ersteZeile, Feldeinstellung
aOpt(0) = ";" 'Feldtrenner
aOpt(1) = "." 'Dezimaltrenner
aOpt(2) = "" 'Tausendertrenner - keiner
aOpt(3) = """" 'Textkennzeichen (Doppelte Hochzeichen – hier maskiert!
aOpt(4) = "UTF-8" 'Zeichensatz CSV-Datei
aOpt(5) = false 'Erste Zeile eintragen (true) oder weglassen (false)
aOpt(6) = true 'Calc erkennt Feldtyp automatisch (true) oder nurText einfügen (false)
REM Jetzt Daten einlesen
aDaten = Helper.CSV_Liste_Einlesen(sCSVURL, aOpt())
if isEmpty(aDaten) then exit sub 'leere Liste - Fehler aufgetreten
aZeile = aDaten(0)
REM Daten eintragen
oTab = oDoc.getCurrentController.getActiveSheet() 'das aktuelle Tabellenblatt
oBereich = oTab.getCellRangeByPosition(oZelle.CellAddress.Column, oZelle.CellAddress.row, _
oZelle.CellAddress.Column + uBound(aZeile()), oZelle.CellAddress.row + uBound(aDaten))
if aOpt(6) then 'Calc wählt Typen
oBereich.setFormulaArray(aDaten)
else
oBereich.setDataArray(aDaten)
end if
end sub

Stephan
********
Beiträge: 10972
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus einer andern Datei kopieren!

Beitrag von Stephan » Mo, 11.02.2019 07:43

Ich weiss hier gar nicht, wo ich den Quellbereich der CSV (A2:J129) Datei,
den Zielbreich des aktuellen Tabellenblattes (B43:K170 )
Eine csv-Datei hat keinen Quellbereich, weil es keine Tabellendatei ist, das müsste also in der Funktion "CSV_Liste_Einlesen" (S. 54 im PDF) angepasst werden. Der Zielbereich wird im Makro hingegen als Selektion übergeben bzw. erwartet.
Ferner kommen heir wieder Fehlermeldungen auf bei
if NOT Helper.CheckCalcDokument(odoc) Then exit sub
oZelle = Helper.GetFirstSelectedCell(oDoc.getCurrentSelection())

Objektvariable nicht belegt!
Bei CheckCalcDokument und GetFirstSelectedCell handelt es sich um die Hilfsfunktionen jeweils gleichen Namens, die im PDF auf den Seiten 204 und ??? stehen.
Zweckmäßigerweise sollten diese, in dasselbe Modul wie das Makro kopiert werden und dann die Aufrufe entsprechend geändert werden in:

Code: Alles auswählen

if NOT CheckCalcDokument(odoc) Then exit sub
und:

Code: Alles auswählen

oZelle = GetFirstSelectedCell(oDoc.getCurrentSelection())

Ich fürchte diese Antwort wird Dir nicht genügen, für mehr habe ich aber momentan keine Zeit.


Gruß
Stephan

little fingers
**
Beiträge: 22
Registriert: Fr, 12.05.2017 15:31

Re: Daten aus einer andern Datei kopieren!

Beitrag von little fingers » Mo, 11.02.2019 12:54

Hi Stephan,

Da magst Du mit Deiner Einschätzung Recht haben.
Werde aber Deine Hinweise beachtend, die entsprechenden Seiten der PDF anschauen.

Trotzdem also, vielen lieben Dank!


Grüße

Ingo

Antworten