Digital-Inn
 
 

Go Back   Digital-Inn > Office-Welt > MS Excel > Excel Lösungsarchiv

Excel Lösungsarchiv Hier findet Ihr die abgeschlossenen Themen, in welchem die Lösungsansaetze für die angefragten Themen zu finden sind. Benutzer haben hier "nur" Leseberechtigung.

Closed Thread
 
Thread Tools Display Modes
Old 06-10-2005   #1
bst
Excel Moderator
Senior Member (Board-Inventar)
 

Join Date: Oct 2004
Location: Ilsfeld
Posts: 2.610
Abgegebene Danke: 16
Erhielt 183 Danke für 180 Beiträge
Question [VBA]Textdatei als gefilterte Datenquelle auslesen

Problem
Quote:
Hallo,
ich stehe grade vor folgendem Problem und benötige da eine Lösung. Ich habe ein Programm, das mir eine Textdatei auswirft. Diese wird jede Minute von dem Programm aktualisiert. Diese Textdatei ist in etwa so Aufgebaut:

25.06.2005,21:24:00,760,13,0
26.06.2005,21:25:00,760,13,0
27.06.2005,21:26:00,760,13,0
28.06.2005,21:27:00,760,13,8
29.06.2005,21:28:00,760,13,0

Wobei die Werte sichtlich durch Kommata getrennt werden. Diese Datei in Excel einzubinden ist kein Problem, man muss sie ja bloß öffnen, aber ich möchte aus dieser Datei ein Diagramm machen, das sich automatisch (oder per Button) aktualisiert. Das Datum/Uhrzeit sollten der X-Achse entsprechen und der Wert der hier 760 ist sollte der Y-Achse entsprechen. Ich hoffe mir kann jemand helfen. Vielleicht hat ja jemand schon soetwas programmiert und schickt es mir Freundlicherweise zu.
Das Diagramm bekomm ich bestimmt hin. hast du nen Link mit na anleitung oder so ich bin in dem Genre nich so zuhause. Aber ich bin auch kein noob.
Die TXT-Datei ist länger als 65536 Zeilen. Und die Untersten Zeilen sind eigentlich die aktuelleren. Wie löse ich dieses Prob? Wäre nicht schlecht wenn man Excel sagen könnte er müsste unten in der Datei anfangen oder in der Mitte. Ich hoffe auch hierbei wird mir geholfen.
Ps. is nen klasse Forum.
Letzters hört man gern nun hier die Lösung.

Viel zu wenig bekannt und benutzt die Möglichkeit die Textdateien als Datenbankfile zu behandeln. Die notwendigen Treiber liefert M$ doch im Office mit.
Der Vorteil liegt auf der Hand, weil man das Textfile sogar dann per SQL filtern kann hier zum Beispiel am Datum im Logfile oder Messbericht. Dabei kann man auch das leidige Problem der Komma separierten Textdateien Umgehen. Es spielt dann keine Rolle ob Semikolon oder Komma separiert.

Zunächts braucht man eine schema.ini. Nähere Erläuterungn dazu als Anhang - zip.

Code:
[Logfile.txt]
ColNameHeader=True
Format=CSVDelimited
'CharacterSet=ANSI
DecimalSymbol=.
'DateTimeFormat=DMY
Col1= Feld1 Date
Col2= Feld2 Date 
Col3= Feld3 Float
Col4= Feld4 Float
Col5= Feld5 Float
Die hier verwendeten Feld bzw.Spaltennamen sind notendig für den Datenbank-Zugriff. die Zeit wird ebenfalls als Datum betrachtet.
Eigentlich ist es das Format DD.MM.YYYY hh.mm, beinhaltet also den Datumswert+Zeitwert. Daher nicht erschrecken wenn wie hier nach Import im Feld für die Zeit 01.01.1900 10:25:00 steht (Datumswert ist 0 daher 1900).

Das Beispiel als Code für ADO - Zugriff.
Code:
Option Explicit

' benötigt im VBA einen Verweis auf Microsoft ActiveX Data Objects x.y Library
' Hier getestet mit der Version 2.8
Public Function TextDataImport()
   Dim CN As ADODB.Connection, rs As ADODB.Recordset
   Dim strSQL As String, strFolder As String, rngZielCelle As Range

   ' Zur Beachten das Datum im SQL-Format hat engl. schreibweise mit Slash
   strSQL = "SELECT * FROM Logfile.txt where [Feld1] > #06/27/2005#"
   
   ' In diesem Verzeichnis muß die Textdatei Logfile.txt liegen
   strFolder = "E:\TEST"
   
   ' hierhin wird das Ergebnis kopiert
   Set rngZielCelle = Range("A2")
   If rngZielCelle Is Nothing Then Exit Function
   
   Set CN = New ADODB.Connection
   On Error Resume Next
   CN.Open "Driver={Microsoft Text Driver (*.txt; *.csv)**;" & "Dbq=" & strFolder & ";" & "Extensions=asc,csv,tab,txt;"
   On Error GoTo 0
   If CN.State <> adStateOpen Then Exit Function
   
   Set rs = New ADODB.Recordset
   On Error Resume Next
   rs.Open strSQL, CN, adOpenForwardOnly, adLockReadOnly, adCmdText
   On Error GoTo 0
   If rs.State <> adStateOpen Then
      CN.Close
      Set CN = Nothing
      Exit Function
   End If
   
   rngZielCelle.CopyFromRecordset rs
   rs.Close
   Set rs = Nothing
   CN.Close
   Set CN = Nothing
End Function
Nun ob man die Exeltabelle für das Diagramm löscht, die Werte gezielt in die Tabelle hier ab A2 neu rein schreibt. Bleibt dem Nutzer übelassen.
Da hier ein gefilterter Auszug der Quelldatei nur importiert wird, spielt die Zeilenanzahl der Quelldatei keine Rolle. Auch der Zugriff erfolgt ja nur lesen.

Loomex
--
Nachtrag bst:

11.01.2007 Fehler mit strVerzeichnis bzw. strFolder korrigiert

Achtung: Der Connectionstring (CN.Open ...) wird hier leider falsch dargestellt. Anstatt des ** muß dort eine geschweifte Klammer zu stehen!!!

Last edited by bst on 06-12-2007 at 12:45
bst is offline  
Sponsored Links
Closed Thread

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 03:57.


Powered by vBulletin® Version 3.7.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 2.4.0
Template-Modifikationen durch TMS
Advertisement System V2.5 By   Branden
Copyright by NightwoLF & Jesse69