Text Datei per Makro nach Calc importieren

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: Text Datei per Makro nach Calc importieren

Re: Text Datei per Makro nach Calc importieren

von abuayyoub » Do, 27.02.2014 18:07

ich hatte nicht die absicht dir zu drohen, das ist nur ein sprichwort und wollte damit andeuten, dass man respekt mit einander umgehen soll und sich nicht unnötig Feinde verschaffen soll, enschuldige das du es als drohung verstanden hast und Danke für deine Hilfe.

Re: Text Datei per Makro nach Calc importieren

von F3K Total » Do, 27.02.2014 18:01

Ups, das ist mir irgendwie so rausgerutscht, habe ich gelöscht.
Du drohst mir, nach allem was ich für dich getan habe?
Ich bin raus, viel Erfolg noch.

Re: Text Datei per Makro nach Calc importieren

von abuayyoub » Do, 27.02.2014 17:55

Hallo,
Danke für deine Antwort, erklär mir bitte wie ich diese Hausaufgaben machen soll. Ich muss zugeben, ich hatte es mir leichter vorgestellt. du helfst mir zwar sehr, solltest aber trotzdem aufpassen was du tippst (kleiner Bub). Besser Freund in der Ferne als Feind in der Nähe.

Re: Text Datei per Makro nach Calc importieren

von F3K Total » Do, 27.02.2014 17:30

Wie jetzt,
mein o.a. Makro hat 52 Zeilen, du schickst mir per privater Nachricht ein aufgenommenes Makro von Dir mit 1232 Zeilen und fragst hier ob das nicht kürzer geht?
Mach erstmal deine Hausaufgaben;-)
R

Re: Text Datei per Makro nach Calc importieren

von F3K Total » Do, 27.02.2014 06:15

Hallo,
klar geht das viel kürzer, ich hatte mich schon damit beschäftigt.
Leider ist die Datei zu groß, um sie hier zu posten, schick mir eine E-Mail, dann schicke ich dir deine Datei zurück.
Gruß R

Re: Text Datei per Makro nach Calc importieren

von abuayyoub » Do, 27.02.2014 00:21

Hallo,
Entschuldigt, dass ich nochmal nachfragen muss, aber geht es wirklich nicht einfacher? Nur wegen einer spalte so ein riesen aufwand. Danke

Re: Text Datei per Makro nach Calc importieren

von F3K Total » Sa, 22.02.2014 19:42

Das Ergebnis der PN ist dieses Makro, ich habe noch einen Statusindikator eingebaut, damit man den Importstatus verfolgen kann, dauert bei einer 8Mb großen .csv etwa 70 Sekunden.

Code: Alles auswählen

sub Import_csv
    odocument = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, Array())
    t1 = getsystemticks()
    oStatusIndicator = odocument.CurrentController.Frame.CreateStatusIndicator
    oStatusIndicator.Start("Los", 100)
    odocument.lockcontrollers
    oSheet = odocument.sheets(0)
    'sPath = converttourl("C:\Users\<USER>\Desktop\pixpro_feed_v2_de_de_full_hdr_20140222012002.csv")
    sPath = F_get_Url
    oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
    oInputStream = oFileAccess.openFileRead(sPath)
    nlenght = oInputStream.Length
    oFileRead = createUnoService("com.sun.star.io.TextInputStream")
    oFileRead.InputStream = oInputStream
    oFileRead.Encoding = "UTF-8"
    r = 0
    Do While NOT oFileRead.IsEOF
        sCurrentLine = oFileRead.readLine
        csv_data = split(sCurrentLine, ";")
        for c = 0 to ubound(csv_data)
            if isNumeric(csv_data(c)) then
                if c = 15 then goto 100' 15 entspricht der Spalte P: EAN-Nummer
                oSheet.getCellByPosition(c,r).value =  csv_data(c)
            else
                100:
                oSheet.getCellByPosition(c,r).String =  csv_data(c)
            end if
        next c
        r =  r + 1
        if r mod 100 = 0 then
           nPosition = oInputStream.Position
           nNewvalue = int(nPosition*100/nlenght)
           oStatusIndicator.Value = nNewvalue
           oStatusIndicator.text = "~"+nNewvalue+" %"
        endif
    Loop
    oStatusIndicator.End
    oInputStream.closeInput
    odocument.unlockcontrollers
    t2 = getsystemticks()
    msgbox ("Fertig, es wurden "+r+" Zeilen in "+((t2-t1)/1000)+ " Sekunden importiert.",64,"CSV Import")
end sub

function F_get_Url as string
        oDialog = createunoservice("com.sun.star.ui.dialogs.FilePicker")
        oDialog.appendFilter("Quelldatei","*.csv")
        oDialog.displaydirectory="c:\"
        if odialog.execute = 0 then
           exit function
        endif
        F_get_Url = oDialog.Files(0)
end function
R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von abuayyoub » Sa, 22.02.2014 17:38

Hallo F3K Total,

habe dir per PN die csv geschickt. Danke

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Sa, 22.02.2014 17:05

Wenn du immer die gleiche Datei einlesen willst,
ersetze

Code: Alles auswählen

sPath = F_get_Url
durch

Code: Alles auswählen

sPath = converttourl("Pfad zu deiner Datei")
abuayyoub hat geschrieben:Hallo,
gibt es keinen schnelleren weg, wie bei manuellen Dialog fenster? auf wunsch kann ich die komplette csv zur verfügung stellen. Danke
Ja, ich glaube das würde helfen.
R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von abuayyoub » Sa, 22.02.2014 16:28

Hallo,
gibt es keinen schnelleren weg, wie bei manuellen Dialog fenster? auf wunsch kann ich die komplette csv zur verfügung stellen. Danke

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Sa, 22.02.2014 15:24

Du brauchst nichts zu verbinden, das Makro berücksichtigt Spalte P (Index 15), lass es einfach mal laufen.
R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von abuayyoub » Sa, 22.02.2014 15:17

Hallo und vielen Danke für die Hilfe,

wie kann ich jetzt das Makro von dir mit meiner obigen Makro verbinden, ich hatte es mir leichter vorgestellt, weil ich lediglich nur eine spalte (in dem beispiel die splate P) als Text Format laden will. Man kann doch sonst manuell im Dialog fenster die spalte markieren und text auswählen, vielen Dank

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Sa, 22.02.2014 15:05

Soedele,
eigentlich müsste dieses Thema abgetrennt werden und eine neue Überschrift bekommen.
Text Datei per Makro nach Calc importieren
Die folgende Lösung ist sicherlich langsamer als der .csv Import.
Da deine Beispieldatei keine Information darüber in sich trägt, ob es sich bei einer Spalte um Text handelt, habe ich keine Lösung per Filter gefunden und lese die csv Datei deshalb zeilenweise ein.

Code: Alles auswählen

sub Import_csv
    odocument = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, Array())
    oSheet = odocument.sheets(0)
    sPath = F_get_Url
    oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
    oInputStream = oFileAccess.openFileRead(sPath)
    oFileRead = createUnoService("com.sun.star.io.TextInputStream")
    oFileRead.InputStream = oInputStream
    oFileRead.Encoding = "UTF-8"
    r = 0
    Do While NOT oFileRead.IsEOF
        sCurrentLine = oFileRead.readLine
        csv_data = split(sCurrentLine, ";")
        for c = 0 to ubound(csv_data)
            if isNumeric(csv_data(c)) then
                if c = 15 then goto 100' 15 entspricht der Spalte P: EAN-Nummer
                oSheet.getCellByPosition(c,r).value =  csv_data(c)
            else
                100:
                oSheet.getCellByPosition(c,r).String =  csv_data(c)
            end if
        next c
        r =  r + 1
    Loop
    oInputStream.closeInput
    msgbox ("Es wurden "+r+" Zeilen erfolgreich importiert ;-)",64,"Import abgeschlossen")
end sub

function F_get_Url as string
        oDialog = createunoservice("com.sun.star.ui.dialogs.FilePicker")
        oDialog.appendFilter("Quelldatei","*.csv")
        oDialog.displaydirectory="c:\"
        if odialog.execute = 0 then
           exit function
        endif
        F_get_Url = oDialog.Files(0)
end function
Viel Erfolg damit
Gruß R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von abuayyoub » Sa, 22.02.2014 13:35

Hallo,
hier ein beispieldatei:
Dateianhänge
beispiel.zip
(6.8 KiB) 201-mal heruntergeladen

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Sa, 22.02.2014 13:10

Hallo,
mit Beispieldokument war kein aufgezeichnetes Makro, sondern wenigstens ein Stück der .csv Datei gemeint.
R

Nach oben