Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Excel txt-Import per VBA

Mitglied: goodbytes

goodbytes (Level 2) - Jetzt verbinden

11.08.2011 um 13:54 Uhr, 5258 Aufrufe, 6 Kommentare

Hallo,
ich habe mal wieder ein Problem, diesmal mit einem txt-Import. Ich muss aber öfters so etwas importieren; auch mit sehr vielen Daten.

Aus einer html-Datei möchte ich Zeilen in Excel importieren.

Screenshot:

61a84d76badae2687c801cb08e2e2a51 - Klicke auf das Bild, um es zu vergrößern

HTML-Code:

96e5a5eff22092c4bcf3d31f95b29bde - Klicke auf das Bild, um es zu vergrößern

Es sind immer vier Bereiche je Zeile. Als neue Zeile kann man ja hier eventuell "Ende Absatz/Zeilenumbruch/Anfang Absatz/ein nummerischer Wert" (z.B. "1.3") nehmen. Die Spalten haben ja das Pipe als Trennzeichen. Dann habe ich zumindest die zusammengehörigen Abschnitte richtig.

Nun können aber im 3. und 4. Bereich auch mehrere Werte stehen. diese sollen dann in extra Zeilen (als erster Bereich dann leer, zweiter Bereich wie in der Zeile darüber).

Ziel ist es, dass ich für jede Variante, welche in der vierten Spalte auch einen Wert hat eine neue Zeile mit vier Spalten erzeuge. Zum Schluß sollen alle Zeilen exakt vier Spalten haben. Ich möchte dann zum weiteren automatisierten Bearbeiten eine zusätzliche Spalte mit interner laufender Nummer hinzufügen, mit der ich durch dessen Angabe genau den zugehörigen Datensatz herausziehen und kopieren kann. Der Mitarbeiter gibt dann die interne Nummer ein und die Felder in seinem Excel-Dokument werden automatisch mit den zugehörigen Daten befüllt.

Leider bekomme ich die Daten nur als PDF oder HTML.

Puh, ganz schön schwierig zu erklären...

Vielleicht kann mir da jemand weiterhelfen, ist doch ganz schön kniffelig gerade weil die dritte und vierte Spalte mehrere Werte aufweisen können.

Vielen Dank schon mal im voraus !!!

Gruß
Torsten

Ach so, die HTML-Datei hat vor und nach dem Anhang noch viel Text, der nicht importiert werden soll. Kann ich den Import gleich so gestalten, dass erst ab einem bestimmten Schlüsselwort mit dem Import begonnen wird? (Absatz/"Anhang"/Absatz Ende)
Mitglied: mathe172
11.08.2011 um 18:00 Uhr
Hallo,

wenn ich das richtig verstanden habe, dann willst du eigentlich dass es am Schluss genauso aussieht wie in der Tabelle, oder?
Versuch mal folgendes: Nimm die Funktion "Daten aus dem Web" und navigiere dann zu der Datei, die du willst. Dort wählst du die zu Importierende Tabelle aus und drückst "Importieren"

MfG,
Mathe172
Bitte warten ..
Mitglied: goodbytes
11.08.2011 um 21:05 Uhr
Hallo Mathe172,
nein, genau das möchte ich eben nicht. Ich möchte, dass das Ergebnis von anderen Makros maschinell auswertbar ist.

Ich habe aber jetzt im Laufe des Tages den Import von der Website in Excel und die anschließende Entfernung des vorherigen und nachfolgenden Textes gemacht.
Also die HTML-Abschnitte mittels "p" sind damit auch weg.

Allerdings steht natürlich alles in "A:A" komplett, da ich die eigentlichen Trennzeichen für die Spalten: "|" ja noch nicht ausgewertet habe.

Also ist noch eine nachträgliche Umformatierung notwendig., aber hier stehe ich hier vor meinem größten Problem.

Es sind immer 4 Spalten, aber in Spalte 3 und 4 können auch mehrere Werte auftreten, für welche ich extra Zeilen machen muss. Dabei müssen die nicht vorhandenen beiden ersten Zellen irgendwie eingefügt oder aufgefüllt werden, damit die Struktur mit genau vier Spalten erhalten bleibt.

Also nochmal ganz klar: Wenn in Spalte 4 eine Zahl auftaucht (erste Zeile Wert, dann kommt ein Zeilenumbruch, dann kommt nach dem Trennungszeichen gleich die nächste Zeile), nur fehlen in dieser neuen Zeile die ersten zwei Felder; sind also nicht einmal per " | | |" vorhanden.

Ist wirklich ganz schön schwierig, da ich aus meiner Sicht kein Merkmal zur Identifizierung einer definitiv neuen Zeile habe um zwei leere Zellen in der neuen Zeile davor einzufügen.

Wie gesagt, es geht hier nicht um Optik, sondern um ein maschinell verwendbare Datei, auf die die Makros aus den anderen Arbeitsmappen einen genau definierten Datensatz zugreifen können. Und für eine klare Zuordnung brauche ich einen Primärschlüssel, und dieser soll mir die nach dem Import zusätzlich per Makro eingefügte Spalte interne Identifizierungs-Nummer dienen. Das Einfügen dieser Spalte ist ja kein Problem; allerdings muss dazu ja alles andere vorher korrekt in Zeilen zugeordnet sein.

Gruß
Torsten
Bitte warten ..
Mitglied: mathe172
11.08.2011 um 23:27 Uhr
Hallo,

was das Merkmal für neue Zeilen angeht: Eigentlich fängt ja nach jedem </P> eine neue Zeile an, oder? Wenn 4 "|" enthalten sind, ist es eine Zeile die Komplett ist, andernfalls müssen die ersten beiden Spalte übersprungen werden und die Daten in Spalte 3 und 4 eingetragen werden.

Meine Frage, ob es genau so wie in den Tabellen ausschauen soll, war wohl etwas unverständlich. Ich meinte einfach, ob die ersten Spalten genau wie in der Tabelle leer bleiben sollen, oder ob die Daten von darüber kopiert werden sollen.

MfG,
Mathe172
P.S.: Ich finde im Internet nicht exakt die Version der Daten die du hast. Könntest du mal einen Link posten (wenn es öffentlich zugänglich ist), denn das <P>-Tag ist normalerweise ja nicht für Tabellen. Vielleicht hilft es ja
Bitte warten ..
Mitglied: goodbytes
12.08.2011 um 08:20 Uhr
Hallo Mathe24,

ach so, wenn du das mit der Ansicht meinst, ja, dann soll es henauso sein. Es müssen halt immer die entsprechenden Datensätze in der richtigen Spalte stehen.

Wenn man ein eindeutiges Trennzeichen findet, wo eine neue Spalte anfängt wäre es ja gut. Dann könnte man ja auch statt zwei Leerfeldern nur eins machen und in die zweite Zelle immer den Inhalt der darüberliegenden Zelle reinkopieren. Wenn ich nämlich genau den zweiten Datensatz rausziehe habe ich ja sonst die Erzeugnisbezeichnung nicht mit dabei. Ist mir heute früh noch so eingefallen...

Ach so, hier der Link wo man sich die Seite frei als HTML runterziehen kann:

http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32006R1881: ...

Hier betrifft es nur den ersten Abschnitt des Anhangs; in anderen solchen Tabellen ist davon mehr enthalten.

Vieleicht fällt dir ja was ein, wäre echt toll!
Ich hab auch schon ewig hin und her experimentiert, leider ohne richtigen Erfolg.

Hier mein letzter Stand für den Web-Import mittels Excel und der Beseitigung des davor- bzw. dahinterliegenden Textes, so dass nur die Tabelle übrig bleibt.

01.
Option Explicit 
02.
 
03.
Sub Test() 
04.
 
05.
' Web-Import 
06.
 
07.
    With ActiveSheet.QueryTables.Add(Connection:= _ 
08.
        "URL;http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32006R1881:DE:HTML" _ 
09.
        , Destination:=Range("$A$1")) 
10.
        .Name = _ 
11.
        "Notice.do?val=437851%3Acs&lang=de&list=572915%3Acs%2C437851%3Acs%2C&pos=2&page=1&nbl=2&pgs=10&hwords=&checktexte=checkbox&visu=" 
12.
        .FieldNames = True 
13.
        .RowNumbers = False 
14.
        .FillAdjacentFormulas = False 
15.
        .PreserveFormatting = True 
16.
        .RefreshOnFileOpen = False 
17.
        .BackgroundQuery = True 
18.
        .RefreshStyle = xlInsertDeleteCells 
19.
        .SavePassword = False 
20.
        .SaveData = True 
21.
        .AdjustColumnWidth = True 
22.
        .RefreshPeriod = 0 
23.
        .WebSelectionType = xlEntirePage 
24.
        .WebFormatting = xlWebFormattingNone 
25.
        .WebPreFormattedTextToColumns = True 
26.
        .WebConsecutiveDelimitersAsOne = True 
27.
        .WebSingleBlockTextImport = False 
28.
        .WebDisableDateRecognition = False 
29.
        .WebDisableRedirections = False 
30.
        .Refresh BackgroundQuery:=False 
31.
    End With 
32.
 
33.
' Text löschen 
34.
 
35.
    Dim a As Range 
36.
    Dim b As Range 
37.
     
38.
    Columns("A:A").Select 
39.
    Set a = Selection.Find(What:="--------------------------------------------------") 
40.
     
41.
    Range("A1:" & a.Address).Select 
42.
    Selection.Delete Shift:=xlUp 
43.
     
44.
    Columns("A:A").Select 
45.
    Set a = Selection.Find(What:="--------------------------------------------------") 
46.
     
47.
    Columns("A:A").Select 
48.
    Set a = Selection.Find(What:="[1] Was Früchte") 
49.
 
50.
    Set b = Range("A" & Range("A65536").End(xlUp).Row) 
51.
        
52.
    Range(a.Address & ":" & b.Address).Select 
53.
    Selection.Delete Shift:=xlUp 
54.
 
55.
End Sub
Gruß
Torsten
Bitte warten ..
Mitglied: mathe172
12.08.2011 um 13:01 Uhr
Hallo,

schau dir mal das an:
01.
    Dim Row As Integer 
02.
    Row = 1 
03.
    Dim LastColumn as Integer 
04.
    LastColumn = 4 
05.
    Dim Content() As String 
06.
    Do Until Cells(Row, 1).Value = "" 
07.
        Content = Split(Cells(Row, 1).Value, "|") 
08.
        If Content(UBound(Content)) = "" Then ReDim Preserve Content(UBound(Content) - 1) 
09.
        For i = 0 To LastColumn - 1 
10.
            If LastColumn - 1 - UBound(Content) <= i Then 
11.
                Cells(Row, i + 1).Value = Trim(Content(i -LastColumn + 1 + UBound(Content))) 
12.
            Else 
13.
                Cells(Row, i + 1).Value = "" 
14.
            End If 
15.
        Next 
16.
        Row = Row + 1 
17.
    Loop
Das Splittet den Text jeder Zeile bei "|" und fügt die Teile dann so ein, dass der letzte immer in Spalte 4 ist (Lässt sich in Zeile 4 definieren). Der Code funktioniert so aber nur im ersten Abschnitt, da danach 5 Spalten vorhanden sind.
Dort fehlt dann die Erste.
Aber mit etwas Anpassung sollte es möglich sein, vom Code alles richtig machen zu lassen.

MfG,
Mathe172
Bitte warten ..
Mitglied: goodbytes
12.08.2011 um 16:46 Uhr
Hallo Mathe172,

tatsächlich, funktioniert ja wirklich prima !!! Das ist ja wirklich eine super Idee, erst einmal komplett alles auseinander zu nehmen. Alle Achtung !!!

Ich werde mir am Wochenende mal einen Kopf machen wie ich das mit mehreren Spalten hinbekomme.

Eventuell teile ich die Abschnitte einfach auf mehrere Tabellenblätter auf. Als Erkennung für eine neue Tabelle kann ich je die Überschrift "Abschnitt2:" verwenden.

Na, mal schauen.

Vielen Dank auf jeden Fall schon mal !!! Ich werde die Frage schob mal als gelöst markieren.

Ein schönes Wochenende wünsche ich dir !! !

Gruß
Torsten
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Excel VBA vereinfachter Import
gelöst Frage von Latex78Microsoft Office3 Kommentare

Hi Leute, ich möchte einige Textdateien nacheinander in verschiedene Exceltabellen importieren. Da die Textdateien verschiedene Namen haben, aber alle ...

VB for Applications

Einlesen von Txt-Dateien mit unterschiedlichen Trennern mit Excel VBA

gelöst Frage von mhsk97VB for Applications12 Kommentare

Hallo Wissende, ich habe eine Textdatei mit unterschiedlichen Trennern vorliegen die ich über ein Excelmakro einlesen und schlußendlich als ...

Microsoft Office

VBA Import Datei nicht gefunden

gelöst Frage von Latex78Microsoft Office3 Kommentare

Hi Leute, ich bekomme mehrere Textdatei von einer Software auf den Rechner geschrieben. Dazu habe ich mir einen TXT-Import ...

Microsoft Office

Excel VBA - Inhalte und Dateiname von txt-Dateien automatisch in Excel importieren

gelöst Frage von Booster07Microsoft Office2 Kommentare

Hallo zusammen, folgendes Problem habe ich so leider nicht im Internet finden können. Deshalb hoffe ich auf eure Hilfe. ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 14 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 18 StundenCPU, RAM, Mainboards5 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 1 TagRouter & Routing7 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Ubuntu
Ubuntu - Routing mit 2 Netzwerkkarten?
Frage von gabrixlUbuntu13 Kommentare

Hei Folgende Situation: Ich habe zwei virtuelle Maschinen: 1 - Server für DHCP, DNS und Routing - Netzwerkkarte 1: ...