Clipboard Text sammeln

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von -iis-.

    Clipboard Text sammeln

    Hallo,

    ich versuche grade meine ersten Schritte in VB (VS 2012 Express) und weiss nicht weiter.

    Ich möchte den Inhalt meines Clipboards (Multiline-Text) auf Knopfdruck speichern, um so nach und nach die Texte zu sammeln.

    Das kann entweder in einer Sqlite-Datenbank geschehen, oder auch in einer Excel-Tabelle oder auch anders. Später soll jedenfalls diese Sammlung sortiert werden, d.h. alle gespeicherten Einträge alphabetisch aufsteigend.

    Kann mir jemand irgendeinen Codeschnipsel zeigen, wie ich das machen kann? Ganz simple, ohne Fehlerhandling etc?
    Willkommen im Forum. :thumbup:
    Du hast hier 2 Probleme genannt, aber nicht, wo Dein eigentliches Problem liegt.
    1. Auslesen des ClipBoards
    2. Abspeichern eines Multiline-Textes.
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. If Clipboard.ContainsText Then
    2. Dim txt As String = Clipboard.GetText
    3. System.IO.File.WriteAllText("c:\temp\xxxxc.txt", txt)
    4. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke erstmal für die Antwort. Auslesen des Clipboards habe ich schon.

    Das Speichern in eine Textdatei reicht nicht, weil ich somit keine nachträgliche sortierung machen kann.
    Mit Excel kann ich leicht die Spalten sortieren ohne irgendwas zu programmieren. Mit SQLite würde ich das auch können.

    Mein Problem liegt darin, dass ich
    a) nicht weiss, wie ich irgend eine Library für Excel oder Sqlite meinem Projekt zufüge (oder brauch ich das garnicht?)

    b) z.B. bei Excel:
    Statt

    VB.NET-Quellcode

    1. System.IO.File.WriteAllText("c:\temp\xxxxc.txt", txt)

    muss ich ja nun sagen, öffne ein excel-file, nehme Mappe xy, schaue wieviele Einträge es gibt, springe zum letzten+1 schreibe meinen Text da in die Zelle 1, speichern, schließen.

    c) Bei excel stellt sich mir auch die Frage, ob meine zeilenumbrüche bei im Clipboard irgendeine Sonderbehandlung brauchen...

    VB.NET-Quellcode

    1. If Clipboard.ContainsText Then
    2. Dim txt As String = System.IO.File.readalltext("c:\temp\xxxxc.txt") &vbnewline & Clipboard.GetText
    3. System.IO.File.WriteAllText("c:\temp\xxxxc.txt", txt)
    4. End If
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    @BlackNetworkBit: Es geht besser und kürzer:

    VB.NET-Quellcode

    1. System.IO.File.AppendAllText("c:\temp\xxxxc.txt", Environment.NewLine & txt)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann solltest Du zunächst mal etwas mehr über die möglichen Formate Deiner ClipBoard-Strings sagen oder sie gleich in eine Excel-Tabelle ablegen.
    Suche mal auf der Startseite nach Excel-Datei schreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der Clipboard-Inhalt ist reiner Text, in dieser Form :

    HTML-Quellcode

    1. Nach einem der größten Gewinne in der Firmengeschichte hat Siemens ein massives Sparprogramm aufgelegt.
    2. Bis 2014 will der Konzern sechs Milliarden Euro weniger ausgeben.
    3. Die Dividende für die Aktionäre bleibt jedoch unverändert. Zahlen zum Stellenabbau nannte das Unternehmen bisher nicht.


    Ja, in einer Excel-Tabelle ablegen, ist ja genau das, was ich mit VB nicht kann...

    RodFromGermany schrieb:

    Suche mal auf der Startseite nach Excel-Datei schreiben.
    Suchergebnisse
    Suchergebnisse 1-30 von insgesamt 450 für »Excel-Datei schreiben«.
    Diese Suchbegriffe wurden hervorgehoben: Excel-Datei schreiben
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Gegoogelt habe ich auch, leider gibt es
    Ungefähr 107.000.000 Ergebnisse
    , ich hatte gehofft, das ich mit einer gezielten Frage in einem Fachforum schneller die passende Antwort bekomme, als mir die Infos zusammenzugoogeln...

    Ich habe es mal so versucht:

    VB.NET-Quellcode

    1. 'Arbeitsmappe öffnen:
    2. oBook = oExcel.Workbooks.Open("C:\Datei.xls")
    3. oSheet = oBook.Worksheets(1)
    4. 'Zeilennummer nach der letzten Zeile bestimmen:
    5. Dim Zeile As Integer = oSheet.UsedRange.Rows.Count + 1
    6. 'Daten in neue Zeile einfügen:
    7. oSheet.Range("A" & Zeile & ":B" & Zeile).Value = DataArray


    Aber dann bekomme ich gleich den Fehler
    Cannot create ActiveX component

    Deshalb meine Frage, muss ich da irgendwo irgendwelche Bibliotheken meinem Projekt zufügen und wenn ja, wie mache ich das..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-iis-“ ()

    Nochmal mein Senf für Textdatei

    Gebraucht wird:
    richtextbox
    button

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'Definitionen
    3. Dim curClipText As String = "textzuersetztenmitnächsten"
    4. Dim mysavepfad As String = ""
    5. 'Timer zum überprüfen starten
    6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Timer1.Start()
    8. 'Optional
    9. RichTextBox1.ReadOnly = True
    10. End Sub
    11. ' Zum Eintragen falls neuer Clipboardtext
    12. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    13. 'Überprüfen ob der jetztige Clipboardtext derselbe ist wie der davor
    14. If Not Clipboard.GetText = curClipText Then
    15. ' Wenn nicht dann in Richtextbox eintragen
    16. RichTextBox1.Text = RichTextBox1.Text & vbNewLine & Clipboard.GetText
    17. 'Und Variable ändern
    18. curClipText = Clipboard.GetText
    19. End If
    20. End Sub
    21. 'Button1 zum speichern
    22. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    23. ' Neuer Savefiledialog
    24. Dim newsavedialog As New SaveFileDialog
    25. If newsavedialog.ShowDialog = vbOK Then
    26. ' Pfad + Dateinamen in Variable speichern
    27. mysavepfad = newsavedialog.FileName
    28. ' Dann als Datei speichern
    29. My.Computer.FileSystem.WriteAllText(mysavepfad, RichTextBox1.Text, False)
    30. End If
    31. End Sub
    32. End Class


    Als Exel datei könnte ich mir vorstellen mit for each jedes Word dann als neue spalte einzutragen nur wie weis ich nicht :S
    kommt halt drauf an, wo die Daten gebraucht werden.
    Brauchst du sie in Word: Speichere mit Word-InterOp nach Word
    Brauchst du sie in Excel: Speichere mit Excel-InterOp nach Excel
    Brauchst du sie in deiner Anwendung: Speichere sie als typisiertes Dataset in eine Xml-Datei. Gugge Daten laden, speichern, verarbeiten
    Als DataTable sind die Daten gleich sortierbar und unterstützen Filter und Such-Vorgänge

    noch ein versuch

    Also, die Fehlermeldung war wohl einem PC verschuldte, auf dem kein Excel installiert war. PC gewechselt. ch habe es jetzt mal so probiert:

    VB.NET-Quellcode

    1. If Clipboard.ContainsText Then
    2. System.IO.File.AppendAllText("c:\bla\bla.txt", Environment.NewLine & Environment.NewLine & "##START##" & Environment.NewLine & Clipboard.GetText & Environment.NewLine & "##END##")
    3. Dim oExcel As Object
    4. Dim oBook As Object
    5. Dim oSheet As Object
    6. oExcel = CreateObject("Excel.Application")
    7. oBook = oExcel.Workbooks.Open("C:\bla\bla.xls")
    8. oSheet = oBook.Worksheets(1)
    9. Dim Zeile As Integer = oSheet.UsedRange.Rows.Count + 1
    10. oSheet.Range("B" & Zeile & ":B" & Zeile).Value = Clipboard.GetText
    11. oBook.Save()
    12. oExcel.Quit()
    13. End If




    In die Textdatei wird jetzt schön geschrieben.
    Aber das mit Excel klappt immer noch nicht. Ich bekomme nun aber die Meldung, dassdie Datei existiert mit der Frage, ob ich überschreiben möchte.

    Wenn ich das bestätige, ist es zwar gut, aber dann lässt sich die Datei später garnicht mehr mit Excel öffnen, weil sie angeblich noch gesperrt ist.
    Wenn ich readonly öffne, sehe ich , das dort bislang nicht eingefügt wurde.
    Also scheint

    VB.NET-Quellcode

    1. oBook.Save()
    2. oExcel.Quit()

    wohl nicht zu klappen, oder was meint ihr?