Zwischenablage

21/12/2008 - 12:54 von Stefan Theobald | Report spam
Hallo Newsgroup,

ich habe vor einigen Jahren mal einen Artikel mit Beispiel über die
Zwischenablage gelesen und damals einen Button in mein Programm gemacht, der
aus der Zwischenablage Werte in eine ganz "normale" ComboBox einfügt.

Jetzt hàtte ich gerne eine zweite Spalte mit einer Menge dabei.
Sprich ich kopiere aus dem EXCEL zwei Spalten, die dann über die
Zwischenablage eingefügt werden sollen.

Ich habe jetzt ein DataGridView genommen und ihm zwei Spalten gegeben.

Wenn ich jetzt einfüge, ist aber alles nur in der Ersten Spalte.
Wie kann ich die Zwischenablage splitten?
Wer kennt sich da aus?

Außerdem (was auch noch nicht klappt) soll, wenn es keine zweite Spalte gibt
bei Menge immer eine 1 eingesetzt werden.
Wie muss ich das denn deklarieren? So wie ich es versucht habe gibt es immer
einen Fehler.

Hoffe, dass da einer helfen kann, bzw. dass sowas überhaupt geht!


Gruß
Stefan

Hier mein CODE:
Dim Zwischenablage_mit_TXT As Boolean =
Clipboard.GetDataObject.GetDataPresent(DataFormats.Text)

If Zwischenablage_mit_TXT = True Then

Dim Zwischenablage As DataObject =
CType(Clipboard.GetDataObject(), DataObject)
Dim Zwischenablagentext As String =
CStr(Zwischenablage.GetData(DataFormats.Text))
Dim Wert_fuer_Werteliste As String = ""

Dim Zwischenablagentext_s(-1) As String

For Each s As String In Zwischenablagentext
If Asc(s) > 31 Then
Wert_fuer_Werteliste &= s
Else
Wert_fuer_Werteliste = Wert_fuer_Werteliste.Trim
If Wert_fuer_Werteliste.Length > 0 Then
ReDim Preserve
Zwischenablagentext_s(Zwischenablagentext_s.Length)
Zwischenablagentext_s(Zwischenablagentext_s.Length -
1) = Wert_fuer_Werteliste
Wert_fuer_Werteliste = ""
End If
End If
Next

Wert_fuer_Werteliste = Wert_fuer_Werteliste.Trim
If Wert_fuer_Werteliste.Length > 0 Then
ReDim Preserve
Zwischenablagentext_s(Zwischenablagentext_s.Length)
Zwischenablagentext_s(Zwischenablagentext_s.Length - 1) =
Wert_fuer_Werteliste
End If

For Each Wert_fuer_Werteliste In Zwischenablagentext_s
DataGridView1.Rows.Add(Wert_fuer_Werteliste)
Next

Else

MsgBox("Das Format in der Zwischenablage ist kein Text" &
(Chr(13)) _
& "und kann somit nicht in die Werteliste" & (Chr(13)) _
& "eingelesen werden!" & (Chr(13)) _
, CType(MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, MsgBoxStyle),
"Falsches Datenformat...")

Exit Sub

End If


Dim Datenzeile As DataRowView

For Each Datenzeile In DataGridView1.Rows

If Datenzeile.Item("Menge") Is DBNull.Value Then
Datenzeile.Item("Menge") = "1"
End If

If Datenzeile.Item("EAN").ToString.Length <> 13 Then
Datenzeile.Delete()
End If

Next
 

Lesen sie die antworten

#1 Thorsten Doerfler
21/12/2008 - 14:55 | Warnen spam
Stefan Theobald schrieb:
ich habe vor einigen Jahren mal einen Artikel mit Beispiel über die
Zwischenablage gelesen und damals einen Button in mein Programm gemacht, der
aus der Zwischenablage Werte in eine ganz "normale" ComboBox einfügt.

Jetzt hàtte ich gerne eine zweite Spalte mit einer Menge dabei.
Sprich ich kopiere aus dem EXCEL zwei Spalten, die dann über die
Zwischenablage eingefügt werden sollen.

Ich habe jetzt ein DataGridView genommen und ihm zwei Spalten gegeben.

Wenn ich jetzt einfüge, ist aber alles nur in der Ersten Spalte.
Wie kann ich die Zwischenablage splitten?
Wer kennt sich da aus?



Daten aus einer Excel-Tabelle werden in der Zwischenablage u.a. als Tab
getrennte Liste abgelegt. Einzelne Zeilen sind durch einen Zeilenumbruch
getrennt. Ein kompaktes Beispiel:

Public Sub PasteFromClipboard(ByVal destGrid As DataGridView)
Dim lText As String

If Clipboard.ContainsText() Then
lText = Clipboard.GetText()

' Zeilen trennen:
Dim lRows = Split(lText, ControlChars.CrLf)

For i As Integer = 0 To lRows.Length - 1
If lRows(i).Trim.Length <> 0 Then
' Spalten einer Zeile trennen:
Dim lColumns() As String = Split(lRows(i), ControlChars.Tab)

' Hier ggf. die Werte der Spalten überprüfen und
' Zeile überspringen, wenn ungültig

If lColumns.Length = 1 Then
' Quelle enthàlt nur eine Spalte; Zweite Spalte Default = 1:
destGrid.Rows.Add(lColumns(0), "1")

ElseIf lColumns.Length >= 2 Then
' Quelle enthàlt mind. 2 Spalten:
destGrid.Rows.Add(lColumns(0), lColumns(1))

End If
End If
Next
End If
End Sub

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen