Nur bestimmte Spalten/Zeilen aus CSV öffnen

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: Nur bestimmte Spalten/Zeilen aus CSV öffnen

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Sa, 14.12.2013 15:43

Moin,
hier ein Makro mit auswählbaren Spalten:

Code: Alles auswählen

Sub S_load_CSV_keep_named_Columns
    aColumns = Array("A","C","D")
    Dim Args(1) as New com.sun.star.beans.PropertyValue
    sURL = F_get_Url  '<------ Dateipfad
    Args(0).Name = "FilterName"
    Args(0).Value ="Text - txt - csv (StarCalc)"
    Args(1).Name = "FilterOptions"
    Args(1).Value = "44,34,21,1,,0,false,false" '<---- hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args())
    osheet = odoc.sheets(0)
    ocursor = osheet.createCursor
    ocursor.gotoendofusedArea(false)
    nMaxcolumn = ocursor.rangeaddress.endcolumn
    for i = nMaxcolumn to 0 step -1
       bfound = false
       for k = 0 to ubound(aColumns)
          if osheet.columns.getbyIndex(i).name = aColumns(k) then bfound = true
       next k
       if bfound = false Then osheet.columns.removeByIndex( i, 1)
    next i 
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
Gruß R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von lorbass » Sa, 14.12.2013 15:15

MisterJones hat geschrieben:hier erhalte ich einen Syntaxfehler...
Dann solltest du den beheben, wie man das bei der Programmierung halt gelegentlich machen muss. Ich kann mir irgendwie nicht so recht vorstellen, dass Rik oder Karolus oder gar beide dir irgendwelchen Blödsinn unterjubeln.

Gruß
lorbass

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von Karolus » Fr, 13.12.2013 11:17

MisterJones hat geschrieben:Klasse das klappt einwandfrei!

Aber gibt es auch eine Möglichkeit, Spalte A, C und D auszuwählen, also nicht nebeneinander liegende Spalten zu selektieren?
Du müsstest einfach nur tun was da bereits steht

Karolus

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Mi, 11.12.2013 18:46

So,
damit es nun keine Verwirrungen mit dem Dateipfad mehr geben kann, habe ich ein Dateiauswahlfenster (com.sun.star.ui.dialogs.FilePicker) mit eingebaut.
Führe entweder S_load_CSV_keep_five_Columns oder S_load_CSV_keep_five_Rows aus, und wähle deine .csv Datei.

Code: Alles auswählen

Sub S_load_CSV_keep_five_Columns
    Dim Args(1) as New com.sun.star.beans.PropertyValue
    sURL = F_get_Url  '<------ Dateipfad 
    Args(0).Name = "FilterName"
    Args(0).Value ="Text - txt - csv (StarCalc)"
    Args(1).Name = "FilterOptions "
    Args(1).Value = "44,34,21,1,,0,false,false" '<---- hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args())
    osheet = odoc.sheets(0)
    ncolumns = 5 '<--- Anzahl Spalten
    ocursor = osheet.createCursor
    ocursor.gotoendofusedArea(false)
    nMaxcolumn = ocursor.rangeaddress.endcolumn
    osheet.columns.removeByIndex( ncolumns, nMaxcolumn-(ncolumns-1))  
End Sub

Sub S_load_CSV_keep_five_Rows
    Dim Args(1) as New com.sun.star.beans.PropertyValue
    sURL = F_get_Url   '<------ Dateipfad 
    Args(0).Name = "FilterName"
    Args(0).Value ="Text - txt - csv (StarCalc)"
    Args(1).Name = "FilterOptions "
    Args(1).Value = "44,34,21,1,,0,false,false" '<---- hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args())
    osheet = odoc.sheets(0)
    nrows = 5 '<--- Anzahl Zeilen
    ocursor = osheet.createCursor
    ocursor.gotoendofusedArea(false)
    nMaxrow = ocursor.rangeaddress.endrow
    osheet.rows.removeByIndex( nrows, nMaxrow-(nrows-1))  
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
Gruß R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Mi, 11.12.2013 18:19

Hi,
MisterJones hat geschrieben:Die Datei und der Pfad stimmen 100%!
... kann ich irgendwie nicht glauben. Diese Makros habe ich gerade unter Linux Mint mit AOO 4.0.1 ausprobiert:

Code: Alles auswählen

Sub S_load_CSV_keep_five_Columns
    Dim Args(1) as New com.sun.star.beans.PropertyValue
    sURL = converttourl("/home/<myUser>/Dokumente/LibreOffice/Calc/Test.csv")  '<------ Dateipfad 
    Args(0).Name = "FilterName"
    Args(0).Value ="Text - txt - csv (StarCalc)"
    Args(1).Name = "FilterOptions "
    Args(1).Value = "44,34,21,1,,0,false,false" '<---- hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args())
    osheet = odoc.sheets(0)
    ncolumns = 5 '<--- Anzahl Spalten
    ocursor = osheet.createCursor
    ocursor.gotoendofusedArea(false)
    nMaxcolumn = ocursor.rangeaddress.endcolumn
    osheet.columns.removeByIndex( ncolumns, nMaxcolumn-(ncolumns-1))  
End Sub

Sub S_load_CSV_keep_five_Rows
    Dim Args(1) as New com.sun.star.beans.PropertyValue
    sURL = converttourl("/home/<myUser>/Dokumente/LibreOffice/Calc/Test.csv")   '<------ Dateipfad 
    Args(0).Name = "FilterName"
    Args(0).Value ="Text - txt - csv (StarCalc)"
    Args(1).Name = "FilterOptions "
    Args(1).Value = "44,34,21,1,,0,false,false" '<---- hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args())
    osheet = odoc.sheets(0)
    nrows = 5 '<--- Anzahl Zeilen
    ocursor = osheet.createCursor
    ocursor.gotoendofusedArea(false)
    nMaxrow = ocursor.rangeaddress.endrow
    osheet.rows.removeByIndex( nrows, nMaxrow-(nrows-1))  
End Sub
Die Datei Test.csv habe ich mit deinen Einstellungen erzeugt:

Code: Alles auswählen

44,34,21,1,,0,false,false
Geht alles so wie es soll.

Gruß R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Mi, 11.12.2013 17:59

Hi,
die Fehlermeldung sagt:

Code: Alles auswählen

Message: unsupported URL (file:///home/Benutzer/Test/Test.csv) 
Dies weist darauf hin, dass das Makro die Datei Test.csv nicht findet.
Du sagst der Pfad sei folgendemaßen angegeben:

Code: Alles auswählen

sURL = converttourl("/home/Benutzername/Test/Anmeldung.csv")
Wieso sagt die Fehlermeldung dann nicht

Code: Alles auswählen

Message: unsupported URL (file:///home/Benutzer/Test/Anmeldung.csv) 
???
Du hast den Pfad der zu öffnenden Datei in die Makros eingetragen?
Und, es gibt diese Datei auch?
Gruß R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von Karolus » Mi, 11.12.2013 08:48

Hallo

ich zitiere ein codeschnipsel von Winfried alias komma4

Code: Alles auswählen

' =========================
' Zum Ermitteln der Filteroptionen für *Deine* CSV-Datei: öffne sie (aus OOo, über
' Dateidialog, unter Verwendung des Import-Dialogs, mit allen nötigen
' Einstellungen), dann lasse folgendes laufen. Notiere die Rückgabe und ersetze im
' Code oben die Werte:

' http://www.oooforum.org/forum/viewtopic.phtml?t=40544
' Villeroy Aug 02, 2006 12:08 am
Sub showFilterOptions
Dim args(),i%
   args() = thisComponent.getArgs
   for i = 0 to uBound(Args())
      if args(i).Name = "FilterOptions" then inputbox "","",args(i).value
   next
End Sub 
Karolus

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Di, 10.12.2013 19:14

Hi,
das kann man mit Makros erledigen:

Code: Alles auswählen

Sub S_load_CSV_keep_Columns
    Dim Args(1) as New com.sun.star.beans.PropertyValue
    sURL = converttourl("C:\Users\<myUsername>\Desktop\Test.csv") '    <------ Dateipfad 
    Args(0).Name = "FilterName"                                        
    Args(0).Value ="Text - txt - csv (StarCalc)"                       
    Args(1).Name = "FilterOptions "                                    
    Args(1).Value = "44,34,12,1,,0,false,false" '                      <------ hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args()) 
    osheet = odoc.sheets(0)                                            
    ncolumns = 5 '                                                     <------ Anzahl Spalten
    ocursor = osheet.createCursor                                      
    ocursor.gotoendofusedArea(false)                                   
    nMaxcolumn = ocursor.rangeaddress.endcolumn                        
    osheet.columns.removeByIndex( ncolumns, nMaxcolumn-(ncolumns-1))   
End Sub                                                                
                                                                       
Sub S_load_CSV_keep_Rows                                               
    Dim Args(1) as New com.sun.star.beans.PropertyValue                
    sURL = converttourl("C:\Users\<myUsername>\Desktop\Test.csv") '    <------ Dateipfad 
    Args(0).Name = "FilterName"                                        
    Args(0).Value ="Text - txt - csv (StarCalc)"                       
    Args(1).Name = "FilterOptions "                                    
    Args(1).Value = "44,34,12,1,,0,false,false" '                      <------ hängt von der Art der .csv-Datei ab
    odoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Args()) 
    osheet = odoc.sheets(0)                                            
    nrows = 5 '                                                        <------ Anzahl Zeilen
    ocursor = osheet.createCursor
    ocursor.gotoendofusedArea(false)
    nMaxrow = ocursor.rangeaddress.endrow
    osheet.rows.removeByIndex( nrows, nMaxrow-(nrows-1))  
End Sub
Die Makros laden erst die gesamte .csv und löschen dann alle nicht benötigten Spalten/Zeilen
Allerdings muss die Zeile

Code: Alles auswählen

Args(1).Value = "44,34,12,1,,0,false,false"
dem Format der .csv-Datei angepasst werden.
Da kann ich ohne Beispieldokument nicht weiterhelfen.
Gruß R

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von lorbass » Di, 10.12.2013 18:36

Mehr weniger als mehr ;) automatisiert kannst du die einzelnen Spalten im Dialog Textimport ausblenden, indem du im Kontextmenü (Rechtsklick!) der betroffenen Spaltenköpfe, die zunächst mit »Standard« beschriftet sind, den Punkt »ausblenden« wählst.

Gruß
lorbass

Re: Nur bestimmte Spalten/Zeilen aus CSV öffnen

von F3K Total » Di, 10.12.2013 18:35

Moin,
ja was denn jetzt? Zeilen(waagerecht) oder Spalten(senkrecht)?
Gruß R

Nach oben