Txt Datei aus Exceldatenblatt erstellen

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Comeit.

    Txt Datei aus Exceldatenblatt erstellen

    Hallo zusammen,

    Ich habe das Ziel aus einem Exceldatenblatt die Werte bestimmter Zellen in eine Textdatei zu schreiben und dieses Zelleninhalte an bestimmte Positionen mit einer bestimmten Anzahl von Leerzeichen getrennt zu schreiben. Ist das machbar?

    Bin totaler Anfänger.

    Gruß

    Marko

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Willkommen im Forum.

    Ja, das ist (wohl) möglich. Dazu müssen wir allerdings wissen, in welcher Umgebung Du Dich befindest, da die Themenangaben unterschiedliches vermuten zulassen. Willst Du das aus Excel heraus per Makro machen? Dann reden wir über VBA. Bist Du in Visual Studio? Dann sind wir bei VB.NET. Oder hast Du Visal Basic 6? Bitte klären, denn jede Umgebung benötigt eine eigene Lösung. Und dann bitte noch sagen, was Du meinst mit

    Comeit schrieb:

    Zelleninhalte an bestimmte Positionen mit einer bestimmten Anzahl von Leerzeichen getrennt
    Mach mal bitte einen Screenshot von Excelbeispieldaten und dem, wie das Endergebnis aussehen soll. Bilder kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.
    VB.NET, VB6, VBA, VBS — Mit welcher Sprache programmiere ich eigentlich?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo @'Comeit'

    ich denke, du arbeitest mit Visual Studio? Und mit VB.Net? Ich denke nicht, dass du VB6 meintest!

    Ich habe vor längerer Zeit eine ähnliche Anwendung geschrieben. Ich habe eine Kopie gemacht und sie etwas angepasst, allerdings musst du nochmal präzisieren, was das heißt:
    Zelleninhalte an bestimmte Positionen mit einer bestimmten Anzahl von Leerzeichen getrennt
    Meinst du, dass ein TAB geschrieben werden soll, oder ein ; ?

    Du solltest dir kleine Ziele machen, die du dann abarbeitest:
    • als Erstes habe ich eine Test-Exceldatei mit 2x123 Werten erstellt.
    • dann machst du im Visual Studio ein neues VB.Net WinForms Projekt auf.
    • Was jeder Anfänger hier im Forum als Erstes mitkriegt: Schalte in jedem VB.Net-Projekt Option Strict On ein und entferne den VisualBasic-Verweis (VB6). Grob umrissen: Option Strict On sorgt für eine Typprüfung, so dass du nicht so schnell Quatsch machst, wie im Paradebeispiel Dim beispiel As Integer = "123". Fehler werden schneller entdeckt, du kannst sie beheben, und diese treten später nicht auf. Außerdem erhältst du IntelliSense-Unterstützung. Zur zweiten Sache: VB6 enthält viele altmodische Funktionen, die dir das Leben schwer machen könnten. Es gibt heute effizientere Methoden. Außerdem wird VB6 von vielen Programmierer verhöhnt. Mit diesen beiden Einstellungen kann dein VB.Net-Projekt konkurrenzfähig zu C# werden.


    • Nun hast du dir gerade als Anfänger ein Programmierziel ausgesucht, für das du erstmal dlls herunterladen musst. Dafür gehst du in den visual-studio-eigenen NuGet-Manager und lädst dir einen schönen Datei-Öffnen-Dialog und die
    „Office-Schnittstelle“ Interop herunter.

    • Nun zum Code: Der Benutzer wählt die zu lesende Excel-Datei aus; das Programm macht eine txt-Datei auf; das Excel-Sheet wird durchgelesen ich habe es nun so gemacht, dass nur die B-Werte rüberkopiert werden, weil ich nicht ganz genau wusste, was du mit einer bestimmten Anzahl von Leerzeichen“ meintest; Programm kopiert.

    VB.NET-Quellcode

    1. 'Option Strict On wurde in den Projekteigenschaften akitiviert.
    2. 'Assembly-Sprache ist Deutsch (Deutschland).
    3. 'Dieses Programm arbeitet ohne VB6.
    4. Imports Microsoft.Office.Interop
    5. Imports Microsoft.WindowsAPICodePack.Dialogs
    6. Public NotInheritable Class Form1
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. Me.BackColor = Color.FromArgb(138, 171, 157)
    9. Button1.BackColor = Color.FromArgb(176, 217, 199)
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. Dim Pfad As String
    13. Using OFD1 As New CommonOpenFileDialog
    14. OFD1.Title = "Exceldatei auswählen"
    15. OFD1.Filters.Add(New CommonFileDialogFilter("Excel", ".xlsx"))
    16. OFD1.IsFolderPicker = False
    17. OFD1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    18. If OFD1.ShowDialog = CommonFileDialogResult.Ok Then
    19. Pfad = OFD1.FileName
    20. Else
    21. Return
    22. End If
    23. End Using
    24. Dim txtfile As System.IO.StreamWriter
    25. Dim Pfad_txt = Pfad.Substring(0, Pfad.LastIndexOf("\"c) + 1) & "gelesene Daten.txt"
    26. txtfile = My.Computer.FileSystem.OpenTextFileWriter(Pfad_txt, True)
    27. Dim xlApp As Excel.Application = New Excel.Application
    28. Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(Pfad)
    29. Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets("Tabelle1"), Excel.Worksheet)
    30. Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
    31. Dim ER As Excel.Range
    32. For rCnt As Integer = 1 To xlRange.Rows.Count
    33. For cCnt As Integer = 1 To xlRange.Columns.Count
    34. If cCnt = 2 Then
    35. ER = CType(xlRange.Cells(rCnt, cCnt), Excel.Range)
    36. Dim v = ER.Value
    37. txtfile.WriteLine(ER.Value)
    38. End If
    39. Next
    40. Next
    41. xlWorkBook.Save()
    42. xlWorkBook.Close()
    43. xlApp.Quit()
    44. txtfile.Close()
    45. Button1.BackColor = Color.FromArgb(0, 255, 0) 'Fertig!
    46. End Sub
    47. End Class




    So, dann weißt du ja, was du beim nächsten Projekt einstellen und machen musst – nämlich Code, den du selbst versucht hast, reinstellen.
    du kannst auch OLEDB verwenden
    hier ein Bsp. mit Space als trenner

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Data.OleDb
    3. Imports System.IO
    4. Public Class Form1
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. Dim PathExcelFile As String = "E:\a9.xlsx"
    7. Dim strConnectionString As String = _
    8. "provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & PathExcelFile & ";" _
    9. & "Extended Properties=""Excel 12.0 XML;HDR=Yes"""
    10. Using connection As New OleDbConnection(strConnectionString)
    11. 'deine Spaltennamen angeben
    12. Dim sSql As String = "Select Namen, Namen2, Namen3 From [Tabelle1$]"
    13. Dim cmd As New OleDbCommand(sSql, connection)
    14. connection.Open()
    15. Dim dr As OleDbDataReader = cmd.ExecuteReader()
    16. 'Textdatei
    17. Dim sw As New StreamWriter("E:\TestFolder\log.txt", True)
    18. If dr.HasRows Then
    19. Do While dr.Read()
    20. 'schreibe Zeile in Textdatei, erste Spalte mit space
    21. sw.WriteLine(String.Format("{0} " & Space(15) & " {1} | {2}", dr.Item(0), dr.Item(1), dr.Item(2)))
    22. Loop
    23. Else
    24. Debug.Print("keine Daten !")
    25. End If
    26. dr.Close()
    27. sw.Close()
    28. End Using
    29. End Sub
    30. End Class
    Ich möchte ein Makro in Excel erstellen und wenn mein Exceldatenblatt mit den entsprechenden daten gefüllt ist, möchte ich per Knopfdruck die Daten in die Textdatei schreiben. Die angekreutzten Felder möchte ich genauso in die Textdatei schreiben
    Bilder
    • 20201218_180707-3de.jpg

      29,63 kB, 1.018×86, 93 mal angesehen
    • 20201218_181009.jpg

      108,28 kB, 912×594, 81 mal angesehen