Gruppen importieren
Forumsregeln
Verfasse bitte die Beiträge in den passenden Kategorien und gib ihnen einen aussagekräftigen Betreff.
Antworte bitte nur zum Thema und beginne ein neues Thema, falls Du noch etwas Zusätzliches sagen möchtest.
Verfasse bitte die Beiträge in den passenden Kategorien und gib ihnen einen aussagekräftigen Betreff.
Antworte bitte nur zum Thema und beginne ein neues Thema, falls Du noch etwas Zusätzliches sagen möchtest.
-
Stefan Schmidt
- Beiträge: 200
- Registriert: Do 30. Dez 2010, 11:09
Gruppen importieren
Bei uns kommt langsam doch der Wunsch auf für bestimmte Ruderer und Boote Gruppen zu bestimmen, um die "missbräuchliche" Benutzung etwas zu regeln.
Da ich glaubte mich mit Excel und csv gut auszukennen, hab ich gedacht, erzeuge einige Gruppen und weise Mitglieder diesen Gruppen zu. Die Idee war zu Hause .csv-Import-Dateien zu bauen, die dann im Bootshaus schnell eingepflegt werden können.
Um zu sehen wie eine Import-Datei auszusehen hätte, erstmal eine csv Datei exportiert, nur beim Versuch "Text in Spalten" gehen alle Teilnehmer ab der 2.Position verloren.
Es sieht so aus, das der Feldtrenner | zwischen Gruppen-Name und erstem Teilnehmer nur einmal verwendet wird, die nächsten Teilnehmer in ein eigenen Zellen landen, somit anders getrennt wird.
Der Versuch alle Teilnehmer mit | zu trennen geht auch beim Import schief, es wird nur jeweils der erste Teilnehmer importiert.
Selbst ein Reimport bringt jeweils nur einen Teilnehmer zurück. Ich hatte eine Testgruppe mit drei Teilnehmern erzeugt, als csv. exportiert, die Gruppe gelöscht, und dann wieder importiert.
Somit sehe ich keine Regel, hier zu Fuß was zu basteln, oder mach ich was falsch?
Alternativen:
Eine .xml zu exportieren und darin zu editieren, ist wegen des Syntaxes riskant, Import geht aber. Außerdem ist mit Excel das kopieren von mehreren Datenfeldern gleichzeitig einfacher.
Ich finde auch keine Möglichkeit der Personendatei per Import bestimmten Personen eine oder mehrere Gruppen zuzuweisen. Da funktioniert csv-Import in der Regel einwandfrei.
Stefan
Da ich glaubte mich mit Excel und csv gut auszukennen, hab ich gedacht, erzeuge einige Gruppen und weise Mitglieder diesen Gruppen zu. Die Idee war zu Hause .csv-Import-Dateien zu bauen, die dann im Bootshaus schnell eingepflegt werden können.
Um zu sehen wie eine Import-Datei auszusehen hätte, erstmal eine csv Datei exportiert, nur beim Versuch "Text in Spalten" gehen alle Teilnehmer ab der 2.Position verloren.
Es sieht so aus, das der Feldtrenner | zwischen Gruppen-Name und erstem Teilnehmer nur einmal verwendet wird, die nächsten Teilnehmer in ein eigenen Zellen landen, somit anders getrennt wird.
Der Versuch alle Teilnehmer mit | zu trennen geht auch beim Import schief, es wird nur jeweils der erste Teilnehmer importiert.
Selbst ein Reimport bringt jeweils nur einen Teilnehmer zurück. Ich hatte eine Testgruppe mit drei Teilnehmern erzeugt, als csv. exportiert, die Gruppe gelöscht, und dann wieder importiert.
Somit sehe ich keine Regel, hier zu Fuß was zu basteln, oder mach ich was falsch?
Alternativen:
Eine .xml zu exportieren und darin zu editieren, ist wegen des Syntaxes riskant, Import geht aber. Außerdem ist mit Excel das kopieren von mehreren Datenfeldern gleichzeitig einfacher.
Ich finde auch keine Möglichkeit der Personendatei per Import bestimmten Personen eine oder mehrere Gruppen zuzuweisen. Da funktioniert csv-Import in der Regel einwandfrei.
Stefan
Re: Gruppen importieren
Hi,
der Trenner zwischen Teilnehmer ist das Semikolon.
getestet und funktioniert: Gruppe als CSV exportieren mit Standardeinstellungen. Nutzer mit hinzufügen mit Trenner ";". Importieren mit Feldtrenner "|" und Texttrenner """, Import-Modus aktualisieren und beim aktualisieren aktualisieren.
@Nick: Beim Importieren mit der Option neuem Gültigkeitszeitraum erstellen meckert der bei mir rum das es schon einen Eintrag mit dem Namen gibt und der Name nicht eindeutig ist (Code 2).
Grüßle
Ralf
der Trenner zwischen Teilnehmer ist das Semikolon.
getestet und funktioniert: Gruppe als CSV exportieren mit Standardeinstellungen. Nutzer mit hinzufügen mit Trenner ";". Importieren mit Feldtrenner "|" und Texttrenner """, Import-Modus aktualisieren und beim aktualisieren aktualisieren.
@Nick: Beim Importieren mit der Option neuem Gültigkeitszeitraum erstellen meckert der bei mir rum das es schon einen Eintrag mit dem Namen gibt und der Name nicht eindeutig ist (Code 2).
Grüßle
Ralf
-
Stefan Schmidt
- Beiträge: 200
- Registriert: Do 30. Dez 2010, 11:09
Re: Gruppen importieren
Danke für den Hinweis, es geht sogar mit Excel, wenn man nicht auf die Idee kommt, "Text in Spalten" zu machen, sondern in die jeweils leeren Felder dahinter was einträgt. Alle Zellen auf max. Länge spreizen, dann sieht man das besser.
Dann am besten mit Nodepad++ kontrollieren ob der Syntax richtig ist. Excel erzeugt im csv teilweise zuviele ; und lässt auch mal am Schluss ein ; weg.
Also einfach zu handhaben ist das ja gerade nicht.
Stefan
Dann am besten mit Nodepad++ kontrollieren ob der Syntax richtig ist. Excel erzeugt im csv teilweise zuviele ; und lässt auch mal am Schluss ein ; weg.
Also einfach zu handhaben ist das ja gerade nicht.
Stefan
Re: Gruppen importieren
schon, könnte ein wenig intuitiver sein. Du musst ja auch nur eine Gruppe importieren, welches das ganze ein wenig vereinfacht. Du kannst auch in Excel die ganzen Personennamen als eine einzelne CSV-Datei erstellen und mit Semikolon exportieren, danach mit einem Texteditor das CSV in die groups.csv anhängen, so musst du nicht so sehr auf die Trenner achten, weil ja mindestens zwischen Gruppennamen und Personennamen eine Pipe gehört, während die Personennamen mit Semikolon getrennt sind.
Grüßle
Ralf
Grüßle
Ralf
-
iww-martin
- Beiträge: 268
- Registriert: Fr 24. Feb 2012, 15:42
- Wohnort: Itzehoe
- Kontaktdaten:
xml-Import: Excel-Makro erstellt xml-Struktur für Import
Hi,
csv-Dateien sind bei der Bearbeitung mit Excel nicht unproblematisch. Nach dem Öffnen einer csv-Datei wird automatisch - nach den Einstellungen des Standard-Trennsymbols - versucht, die Daten in Spalten aufzuteilen. Außerdem finden automatische Datentyp-Konvertierungen statt, bei denen schon mal Daten ungewünscht verändert werden können. Dabei verliert schnell mal eine Postleitzahl oder Mitgliedsnummer eine führende Null, weil der Wert wie eine Zahl aussieht und zu einem Zahlwert umgewandelt wird...
Es gibt die Möglichlichkeit, xml-Dateien zu exportieren und zu importieren und ich erstelle für Imports aus Excel-Tabellen mit einem Makro xml-Dokumente.
Das hat viele Vorteile und funktioniert großartig!
So kann man die komfortable Datenpflege in Excel nutzen und geht den Problemen mit csv-Dateien aus dem Weg.
Hier ein einfaches Beispiel für so ein Makro zum Import von "Mannschaften".
Das zugehörige Excel-Arbeitsblatt enthält zwei Spalten...
In Zeile 6 stehen die Bezeichner der xml-Elemente...
Zelle [A6] = Name
Zelle [B6] = Crew1Id
Zeile 7 zeigte beispielhafte Mustereinträge
Zelle [A7] = Lööft jot (Max Mustermann)
Zelle [B7] = Mustermann, Max
In Zeile 8 stehen Spaltenüberschriften (mit einem Autofilter, um die zu importierende Auswahl ggf. einzugrenzen)...
Zelle [A8] = Mannschaftname
Zelle [B8] = Mannschaft 1
Ab Zeile 9 stehen die Daten...
Zelle [A9] = Speedy (Karl Muster)
Zelle [B9] = Muster, Karl
Zum Ausprobieren einfach mal diese 8 Attribute in ein Excel-Datenblatt eingeben. Muss die Mannschaft größer sein, können weitere Spalten Crew2Id, Crew3Id, Crew4Id, ... hinzugefügt werden.
Die Daten werden mit dem folgenden Makro aufbereitet:
Das Beispiel kann leicht für andere Importformate angepasst werden, wenn man als Muster zuvor Datensätze in eine xml-Datei exportiert.
Das Makro liest der Reihe nach alle xml-Elemente in Zeile 6 - egal ob 2 oder 35 oder mehr - und verarbeitet die zugehörigen Datenzeilen...
Imports sollten zuerst einmal auf einer Testinstallation ausprobiert werden, da man ggf. in der Excel-Tabelle leere Attribute mit einem Standardwert belegen muss oder ein leeres Attribut nicht mit übergeben darf.
Die aussagefähigen Warnungen und Fehlermeldungen beim Import helfen sehr gut, um diese Sonderfälle in Abhängigkeit vom bezeichner des xml-Elemets in der o.g. Case-Anweisung zu lösen.
Wir verwenden solche Excel-Dateien u.a. für den xml-Import von Personen, Booten, Mannschaften und vor allem zum Import von Fahrtenbucheinträgen nach mehrtägigen Vereinsfahrten mit vielen Teilnehmer/innen.
Viele Grüße
Martin
Itzehoer Wasser-Wanderer e.V.
csv-Dateien sind bei der Bearbeitung mit Excel nicht unproblematisch. Nach dem Öffnen einer csv-Datei wird automatisch - nach den Einstellungen des Standard-Trennsymbols - versucht, die Daten in Spalten aufzuteilen. Außerdem finden automatische Datentyp-Konvertierungen statt, bei denen schon mal Daten ungewünscht verändert werden können. Dabei verliert schnell mal eine Postleitzahl oder Mitgliedsnummer eine führende Null, weil der Wert wie eine Zahl aussieht und zu einem Zahlwert umgewandelt wird...
Es gibt die Möglichlichkeit, xml-Dateien zu exportieren und zu importieren und ich erstelle für Imports aus Excel-Tabellen mit einem Makro xml-Dokumente.
Das hat viele Vorteile und funktioniert großartig!
So kann man die komfortable Datenpflege in Excel nutzen und geht den Problemen mit csv-Dateien aus dem Weg.
Hier ein einfaches Beispiel für so ein Makro zum Import von "Mannschaften".
Das zugehörige Excel-Arbeitsblatt enthält zwei Spalten...
In Zeile 6 stehen die Bezeichner der xml-Elemente...
Zelle [A6] = Name
Zelle [B6] = Crew1Id
Zeile 7 zeigte beispielhafte Mustereinträge
Zelle [A7] = Lööft jot (Max Mustermann)
Zelle [B7] = Mustermann, Max
In Zeile 8 stehen Spaltenüberschriften (mit einem Autofilter, um die zu importierende Auswahl ggf. einzugrenzen)...
Zelle [A8] = Mannschaftname
Zelle [B8] = Mannschaft 1
Ab Zeile 9 stehen die Daten...
Zelle [A9] = Speedy (Karl Muster)
Zelle [B9] = Muster, Karl
Zum Ausprobieren einfach mal diese 8 Attribute in ein Excel-Datenblatt eingeben. Muss die Mannschaft größer sein, können weitere Spalten Crew2Id, Crew3Id, Crew4Id, ... hinzugefügt werden.
Die Daten werden mit dem folgenden Makro aufbereitet:
Code: Alles auswählen
' Funktion für Zeilumbrüche in Textaugaben
Function CrLf(Anzahl As Integer) As String
s = ""
n = 1
While (n <= Anzahl)
s = s + Chr(13) + Chr(10)
n = n + 1
Wend
CrLf = s
Exit Function
End Function
Sub crews_xml()
Dim Param(200)
' Arrays zur Maskierung von Sonderzeichen in der xml-Importdatei
SearchFor = Array("&", "<", ">", Chr(34))
ReplaceWith = Array("&", "<", ">", """)
' Bildschirmausgabe unterdrücken
Application.ScreenUpdating = False
i = 1
' Einlesen der xml-Elemente
Range("A6").Activate
While (ActiveCell.Value <> "")
Param(i) = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
i = i + 1
Wend
' Anzahl der xml-Elemente...
nMaxElements = i - 1
' Ausgabedatei
sFilename = ActiveWorkbook.Path + "\crews.xml"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile(sFilename, True, False)
' xml-Header in Ausgabedate schreiben...
f.WriteLine "<?xml version=" + Chr(34) + "1.0" + Chr(34) + " encoding=" + Chr(34) + "ISO-8859-1" + Chr(34) + "?>"
f.WriteLine "<export type=" + Chr(34) + "text" + Chr(34) + ">"
' Verarbeitung der Datenzeilen
Range("A9").Activate
nAnzahl = 0
bFilteredRows = False
While (ActiveCell.Offset(0, 1).Value <> "")
' Durch einen Autofilter ausgeblendete Zeilen haben eine Zeilenhöhe von 0
' Die folgende if-Anweisung berücksichtigt nur Zeilen aus der Ergebnismenge eines Autofilters!
If ActiveCell.Rows.Height > 0 Then
i = 1
f.Write "<Record>"
While (i <= nMaxElements)
xmlTag = "<" + Param(i) + ">"
xmlEndTag = "</" + Param(i) + ">"
Select Case Param(i)
' Hier werden ggf. Sonderfälle korrekt formatiert oder leere Elemente unterdrückt. Hier gezeigt am Beispiel eines Elements Birthday (z.B. in Personendaten) , dass als Datum formatiert wird...
' Case "Birthday"
' f.Write xmlTag + Format(ActiveCell.Value, "dd.mm.yyyy") + xmlEndTag
' Case "xxx"
'
Case Else
If (ActiveCell.Value <> "") Then
' Sonderzeichen maskieren...
sAttribut = CStr(ActiveCell.Value)
j = LBound(SearchFor)
While (j <= UBound(SearchFor))
If (InStr(1, sAttribut, SearchFor(j)) > 0) Then
sAttribut = Replace(sAttribut, SearchFor(j), ReplaceWith(j))
End If
j = j + 1
Wend 'j < UBound(SearchFor)
f.Write xmlTag + sAttribut + xmlEndTag
End If
End Select
ActiveCell.Offset(0, 1).Activate
i = i + 1
Wend
f.WriteLine "</Record>"
ActiveCell.Offset(1, -nMaxAttributes).Activate
nAnzahl = nAnzahl + 1
Else
' es gibt ausgefilterte Zeilen
bFilteredRows = True
' nächste Datenzeile
ActiveCell.Offset(1, 0).Activate
End If
Wend
f.WriteLine "</export>"
' Ausgabedatei schließen...
f.Close
' Setze den Cursor wieder auf die Ausgangzelle zurück...
Range("A6").Activate
' Bildschirmausgabe aktivieren
Application.ScreenUpdating = True
MsgText = "Parameter für " + Str(nAnzahl) + " Mannschaften wurden verarbeitet." _
+ CrLf(2) _
+ "Die Importdatei" _
+ CrLf(2) _
+ sFilename _
+ CrLf(2) _
+ "wurde erfolgreich erstellt."
If bFilteredRows Then
MsgText = MsgText + CrLf(2) _
+ "Es wurden nur die Zeilen aus der Ergebnismenge des Autofilters berücksichtigt!"
End If
msg = MsgBox(MsgText, _
vbOKOnly, _
"Itzehoer Wasser-Wanderer e.V. - Importdatei (xml) für Mannschaften erstellen...")
End SubDas Makro liest der Reihe nach alle xml-Elemente in Zeile 6 - egal ob 2 oder 35 oder mehr - und verarbeitet die zugehörigen Datenzeilen...
Imports sollten zuerst einmal auf einer Testinstallation ausprobiert werden, da man ggf. in der Excel-Tabelle leere Attribute mit einem Standardwert belegen muss oder ein leeres Attribut nicht mit übergeben darf.
Die aussagefähigen Warnungen und Fehlermeldungen beim Import helfen sehr gut, um diese Sonderfälle in Abhängigkeit vom bezeichner des xml-Elemets in der o.g. Case-Anweisung zu lösen.
Wir verwenden solche Excel-Dateien u.a. für den xml-Import von Personen, Booten, Mannschaften und vor allem zum Import von Fahrtenbucheinträgen nach mehrtägigen Vereinsfahrten mit vielen Teilnehmer/innen.
Viele Grüße
Martin
Itzehoer Wasser-Wanderer e.V.
-
Stefan Schmidt
- Beiträge: 200
- Registriert: Do 30. Dez 2010, 11:09
Re: Gruppen importieren
Herzlichen Dank für den Lehrgang für Exzel/xml Programmierung. Ich hoffe dass hilft auch anderen. Ich warte aber erst mal ab, was sich unsere werte Sportleitung in Sachen Gruppen ausdenkt.
Dann komm ich gerne wieder drauf zurück.
Stefan
Dann komm ich gerne wieder drauf zurück.
Stefan