Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Datenexport in *.dat Datei

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Datenexport in *.dat Datei (2312 mal gelesen)
melzig
Mitglied
Maschinenbautechniker


Sehen Sie sich das Profil von melzig an!   Senden Sie eine Private Message an melzig  Schreiben Sie einen Gästebucheintrag für melzig

Beiträge: 396
Registriert: 15.01.2003

Intel Xeon CPU E5-1650v2 @3,5 GHz; 32 GB RAM
Quadro K4000 3 GB
2x 20" TFT LG Flatron L2000CN
Space Pilot 3D Connexion
Windows 7 Professional 64 Bit
Inventor Professional 2015
-64-Bit-Edition-
Inventorintegration für
Autodesk Productstream Professional 2011

erstellt am: 27. Jun. 2005 10:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Excel-Spezialisten!

Habe eine Excel-Datei aus der ich Werte exportieren möchte.
Den Code habe ich hier aus dem Forum (ist von Nancy).

Sub datenexport()
Application.DisplayAlerts = False
Dim ws As Worksheet
Dim Bereich As Range
Dim Zeile As Object
Dim Zelle As Object
Dim s As String

For Each ws In ActiveWorkbook.Worksheets
  ws.Activate
  Set Bereich = ActiveSheet.UsedRange
  'hier schreibst Du deinen Pfad rein
  Open "C:\Probepfad\" & ActiveSheet.Name & ".dat" For Output As #1
    For Each Zeile In Bereich.Rows
      For Each Zelle In Zeile.Cells
        s = s & Zelle.Text & "|"
        Next
    Print #1, s
    s = ""
    Next
  Close #1
Next ws
Application.DisplayAlerts = True
End Sub

Das funktioniert auch schon recht gut.

hier das Ergebnis:
CUSTOMER|PART|CODE|ODATE|PROD|OCACT|CDATE|CTIME|CHARGE|POS|FTIME|FACT|CACT|FWEIGHT|
sdf|dfg|erg|15.06.2005|F-18|123|17.06.2005|17:30|55|3|17:30| || |
gju|hj|kikl|16.06.2005|F-19|34|18.06.2005|18:30|rt|4|18:30| || |
zjuj|loö|oöpoäö|17.06.2005|F-20|53|19.06.2005|19:30|uzzu|6|19:30| || |
| || || || || || || |

Ich möchte nun aber, daß er die erste Zeile wegläßt und die letzte praktisch leere Zeile auch.
Ich habe schon eine wenig rumprobiert, kriege es aber nicht hin.
Ich würde mich freuen, wenn Ihr mir weiterhelfen könntet bzw. Denkanstösse in die richtige Richtung gebt.
Vielen Dank!

Tschüß Frank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 27. Jun. 2005 14:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für melzig 10 Unities + Antwort hilfreich

Moin Frank,

manman was buddelst du denne für'n lustiges Zeug aus? ;-))

Ähm, versuche es mal so, allerdings wie du das mit der letzten Zeile
meintest, weiss ich nicht so recht, schlimmstenfalls nimm':
For r = 2 to ubound(arr,1) - 1

Code:

Sub to_dat_files()
    Dim ws As Worksheet
    Dim s As String, r As Long, c As Integer
    Dim arr
    For Each ws In ActiveWorkbook.Worksheets
        arr = ws.UsedRange
        Open "D:\" & ws.Name & ".dat" For Output As #1
        For r = 2 To UBound(arr, 1)
            For c = 1 To UBound(arr, 2)
                s = s & arr(r, c) & "|"
            Next
            Print #1, s
            s = ""
        Next
    Close #1
    Next ws
End Sub

lg Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

melzig
Mitglied
Maschinenbautechniker


Sehen Sie sich das Profil von melzig an!   Senden Sie eine Private Message an melzig  Schreiben Sie einen Gästebucheintrag für melzig

Beiträge: 396
Registriert: 15.01.2003

erstellt am: 27. Jun. 2005 15:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Nancy !

Vielen Dank für Deine Hilfe!
Es hat funktioniert.
Ich werde doch mein Anfängerbuch nochmal bemühen müssen.
Das ich in der Schleife für die Zeilen mit 2 anfangen muß und bis zur letzten benutzten Zeile war mir klar.Wie ich aber die letzte benutzte Zeile rauskriege wußte ich nicht.
Die Funktion UBound kannte ich nicht.
UBound liefert die Obergrenze einer Datenfeld-Dimension.
UBound(arr, 1)
Und mit arr = ws.UsedRange mache den benutzten Bereich zu meiner Datenfefd-Dimension.
Ich versuche auch jedesmal zu verstehen was hier reingeschrieben wird, denn nur das blanke Abschreiben nützt mir nichts.

Nochmals vielen Dank!

Tschüß Frank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

melzig
Mitglied
Maschinenbautechniker


Sehen Sie sich das Profil von melzig an!   Senden Sie eine Private Message an melzig  Schreiben Sie einen Gästebucheintrag für melzig

Beiträge: 396
Registriert: 15.01.2003

Intel Xeon CPU E5-1650v2 @3,5 GHz; 32 GB RAM
Quadro K4000 3 GB
2x 20" TFT LG Flatron L2000CN
Space Pilot 3D Connexion
Windows 7 Professional 64 Bit
Inventor Professional 2015
-64-Bit-Edition-
Inventorintegration für
Autodesk Productstream Professional 2011

erstellt am: 27. Jun. 2005 16:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Nancy !

Hatte mich zu früh gefreut!
Jetzt macht er mir aus meiner Uhrzeit eine Zahl.
sdf|dfg|erg|15.06.2005|F-18|123|17.06.2005|0,729166666666667|55|3|0,729166666666667|fgh|hgj|gh|
gju|hj|kikl|16.06.2005|F-19|34|18.06.2005|0,770833333333333|rt|4|0,770833333333333|hj|hj|hj|
zjuj|loö|oöpoäö|17.06.2005|F-20|53|19.06.2005|0,8125|uzzu|6|0,8125|hj|hj|hj|


Habe einen Überwachungsausdruck auf arr(r,c) gelegt und dort sehe ich, daß er das Datum als variant/date behandelt aber die Uhrzeit als variant/double. Da kommt leider nicht das raus, was ich will.
Ich kann doch aber arr nicht als String deklarieren, da es doch die Datenfeld-Dimension darstellt.
Bei der ersten Variante war das dadurch gelöst, daß die Texteigenschaft der jeweiligen Zelle exportiert wurde.

Stehe ein wenig auf dem Schlauch.

Muß ich eine Zwischenvariable einführen, die ich als String deklariere?

Bitte nochmal um Hilfe!

Tschüß Frank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 27. Jun. 2005 17:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für melzig 10 Unities + Antwort hilfreich

Hi Frank,

Mist! ;;-))
Fällt mir auf die Schnelle auch nix ein, ausser wieder ein direktes  Auslesen, hübsch eine Zelle nach der Anderen;-)

Usedrange.Value als auch usedrange.value2 bringen nix und Usedrange.Text gibbets nicht.
Dim arr() as string geht auch nicht, da der Herr Range ein Variant braucht.
Und ein cstr(arr(r,c]] ist zu spät, die Messe wird bei der Übergabe des Rangebereiches an das Variant gelesen.

Ich hoffe deine Tabellen sind keine Riesenteile, wird also etwas langsamer, keine andre Idee grade ... ;-)

lg Nancy

Code:

Sub no_idea()
  Dim ws As Worksheet, r&, c%, s$
  For Each ws In ActiveWorkbook.Worksheets
      Open "D:\" & ws.Name & ".dat" For Output As #1
      With ws.UsedRange
        For r = 2 To .Rows.Count
            For c = 1 To .Columns.Count
              s = s & ws.Cells(r, c).Text & "|"
            Next
            Print #1, s
            s = ""
        Next
      End With
      Close #1
  Next
End Sub
 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 27. Jun. 2005 20:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für melzig 10 Unities + Antwort hilfreich

Ich nochmal ;-)

menno, die Zwischenablage - thats it!
Hätt' ich eigentlich drauf kommen müssen tun ..., stümmts @Bernd/Max? ;;-))

Also Frank, das wäre zB ein Ansatz der auf dem besten Weg zum Erreichen der Lichtgeschwindigkeit wäre.
Wobei da irgendwie noch 'Müll' drinnen steht, konnte die Zeichen jetzt auf die Schnelle nicht festzurren.
Geht ja nurmal ums Prinzip, ich mein das Abklopfen jeder Zelle funzt zwar auch, aber das Clipboard dagegen ist sowas wie die Geschwindigkeit eines Skilifts aber mit Mach3 ;-)
Soll heissen, bei großen Tabellen wird's richtig interessant.

Wiegesagt, stehen noch paar Zeichen zuviel drinnen,
brauch ich aber etwas mehr Zeit, ist also nicht ausgemiezelt bis zum bitteren Ende.
Wenn's interessiert, angeregt [in Erinnerung gerufen] durch dieses: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=0&h=563&ao=1#a123x

Gruss Nancy
--
ps: soviel nur mal als mögliche [unausgereizte/unhandled] Alternative / Anregung

Code:

'braucht einen Verweis auf Microsoft Forms 2.0 Object Library
'und version Excel ab 2000
Sub asdf()
   Dim ws As Worksheet, dObj As New DataObject
   Dim r, c, s$, i&
   For Each ws In ActiveWorkbook.Worksheets
     
      'ab damit in die Zwischenablage
      ws.UsedRange.Copy
     
      'dobj mit der Zwischenablage füllen
      dObj.GetFromClipboard
     
      Application.CutCopyMode = 0
      Open "D:\" & ws.Name & ".dat" For Output As #1
     
      'ein Array aller Zeilenumbrüche erstellen
      r = Split(dObj.GetText, Chr(13))
     
      'über alle Elemente der Arrays (also der Zeilen)
      For i = LBound(r) To UBound(r)
         'Separator vbTab ersetzen und die Zeile schreiben
         Print #1, Replace(r(i), vbTab, "|")
      Next
      Close #1
     
      'Zwischenablage leeren
      dObj.Clear
   Next
   Set dObj = Nothing
End Sub
    

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

melzig
Mitglied
Maschinenbautechniker


Sehen Sie sich das Profil von melzig an!   Senden Sie eine Private Message an melzig  Schreiben Sie einen Gästebucheintrag für melzig

Beiträge: 396
Registriert: 15.01.2003

erstellt am: 28. Jun. 2005 08:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Nancy !

Vielen Dank nochmal!
Habe jetzt die Variante mit dem Zellenweise auslesen genommen.
Funktioniert gut.
Ich werde aber die andere Variante auch nochmal probieren.
Vielleicht wieder ein wenig Wissensgewinn.
Ich würde Dir ja gerne mehr als 10U´s geben, aber das funktioniert irgendwie nicht.

Tschüß Frank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

melzig
Mitglied
Maschinenbautechniker


Sehen Sie sich das Profil von melzig an!   Senden Sie eine Private Message an melzig  Schreiben Sie einen Gästebucheintrag für melzig

Beiträge: 396
Registriert: 15.01.2003

Intel Xeon CPU E5-1650v2 @3,5 GHz; 32 GB RAM
Quadro K4000 3 GB
2x 20" TFT LG Flatron L2000CN
Space Pilot 3D Connexion
Windows 7 Professional 64 Bit
Inventor Professional 2015
-64-Bit-Edition-
Inventorintegration für
Autodesk Productstream Professional 2011

erstellt am: 28. Jun. 2005 08:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hier nochmal zur Geschwindigkeit:
Habe die 14 Spalten auf 65536 Zeilen mit Werten gefüllt.
Zum Exportieren werden ca. 30 sec. benötigt.
Aber diesen Umfang wir die Tabelle eigentlich nie haben.
Mal sehen was die andere Variante bringt.

Tschüß Frank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bst
Mitglied



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

.

erstellt am: 28. Jun. 2005 13:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für melzig 10 Unities + Antwort hilfreich

Hi Nancy,

solange keine 'bösen' Sonderzeichen drinne sind, ist's doch so bestens, oder etwa nicht ;-)

CUSee You, Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 28. Jun. 2005 22:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für melzig 10 Unities + Antwort hilfreich

Hi Bernd,

ups, das war wohl ein Error im trekkie-System,
stimmt - es stimmt. :-)
BTWBy the way (So nebenbei bemerkt), auf 3 verschiedenen Betriebssystemen scheint der Win-Standardeditor, jedesmal verschiedene End-of-Line für Chr(13) zu nehmen, dem Irrtum war ich gestern erlegen, da sich auf dem einen PC | und | [das kleinere]
absolut ähnelten und ich dachte der macht die Spaltentrenner falsch.

Hab' aber heute mit Vim festgestellt - der ist nicht so trügerisch -
dasses doch korrekt war, Danke :-)

@Frank:
... und probiert?;-)
Macht bei mir ca. 1/4 bis ein 1/5 der Zeit aus.
2.9 sec vs. 12.97 sec
Aber wiegesagt, richtig merkbar wirds erst bei großen Tabellen,
bei kleinen Bereichen wirst kaum was [deutlich] merken.
Aber freut mich wenns klappt - wählen musst Du;-)

lg Nancy   

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

melzig
Mitglied
Maschinenbautechniker


Sehen Sie sich das Profil von melzig an!   Senden Sie eine Private Message an melzig  Schreiben Sie einen Gästebucheintrag für melzig

Beiträge: 396
Registriert: 15.01.2003

erstellt am: 30. Jun. 2005 14:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@ nancy

Geschwindigkeit habe ich jetzt ausprobiert bei 14 Spalten und 65536 Zeilen ist bei mir der Unterschied 30 sec. zu 18 sec.!
Ich habe ein wenig Probleme mit deiner Variablendeklaration
Dim r, c, s$, i&
wenn nichts dahintersteht ist es variant
s $ ist ein String aber was ist i& > integer ?
Habe in der VBA - Hilfe unter Variablendeklaration nachgesehen aber über diese Variante der Deklaration nichts gefunden.


Tschüß Frank !

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Elektrotechniker / Elektriker als Anlagenmanager ? Photovoltaik-Großkraftwerke (m/w/d) Voll- oder Teilzeit für unseren Standort in Salem

Wir sind eine Unternehmensgruppe mit Sitz am Bodensee, die sich auf den deutschlandweiten 360°-Service rund um die technische Betriebsführung sowie auf den Bau und das Repowering von Photovoltaik-Kraftwerken spe­zia­lisiert hat. Dabei steht die fachlich hochwertige, persönliche und individuelle Kundenbetreuung an erster Stelle.

Zusammen mit dir wollen wir weiter wachsen.

Wir wollen mit dir die Zukunft im sinnstiftenden Bereich der nachhaltigen Energien gestalten....

Anzeige ansehenElektrotechnik, Elektronik
startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 30. Jun. 2005 14:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für melzig 10 Unities + Antwort hilfreich

Hi Frank,

sorry, Kurznotation war reine Faulheit;-)

Nein, i& ist kein i wie integer, denn wenns eines wäre,
hättste > Zeile 32.767 nen Überlauf;-)

$ = String
% = Integer
& = Long
! = Single
# = Double
@ = Currency

lg Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz