Если я скопирую из excel одну строку, состоящую из трех ячеек, где значения в ячейках 1, 2 и 3 равны A, B и C соответственно, я ожидаю одну строку результатов в таблице данных loadDG. Однако я получаю вторую строку результатов второй итерации цикла For Each ... Next, даже если из Excel была скопирована только одна строка значений, о чем свидетельствует отсутствие значения в Col 2.
Пожалуйста, кто-нибудь может объяснить, что происходит? Вот (отредактированный, следующие комментарии ниже) код:
Public Class Form1
'Initialise the Datagrid
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitialiseLoadsDG()
End Sub
'Initialise Datagrid
Public Sub InitialiseLoadsDG()
LoadsDG.Rows.Clear()
LoadsDG.RowTemplate.Height = 20
For i As Integer = 1 To 50
LoadsDG.Rows.Add(i, "", "", "")
Next
LoadsDG.ClearSelection()
End Sub
'Paste copied values
Private Sub LoadsDG_KeyDown(sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles LoadsDG.PreviewKeyDown
If e.Control And e.KeyCode = Keys.V Then
Dim i As Integer = 0
For Each copiedLine As String In Clipboard.GetText.Split(vbNewLine)
LoadsDG.Rows(i).Cells(1).Value = copiedLine
LoadsDG.Rows(i).Cells(2).Value = i
i = i + 1
Next
End If
End Sub
End Class
Вот что я ожидаю:
Column1 Column2 Column3 Column4
Row1 ABC 0
Row2
Вот что я получаю:
Column1 Column2 Column3 Column4
Row1 ABC 0
Row2 1
ОБНОВЛЕНИЕ: После комментария Джими мой Sub для вставки содержимого буфера обмена работает как положено. Код удаляет из скопированного содержимого Excel возврат каретки (vbCr), перевод строки (vbLf) и комбинированные возврат каретки и перевод строки (vbCrLf), оставляя только выделенные табуляцией значения. Обратите внимание, что каждая строка скопированного содержимого Excel занимает отдельный элемент (выделенный табуляцией) в массиве copiedCells. Оставшаяся часть кода просто разбивает каждую выделенную табуляцией строку (vbTab) на отдельные значения ячейки Excel и вставляет их в соответствующую ячейку сетки loadDG. Большое спасибо всем, кто откликнулся. Вот полный код:
'Paste copied values
Private Sub LoadsDG_KeyDown(sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles LoadsDG.PreviewKeyDown
If e.Control And e.KeyCode = Keys.V Then
Dim copiedCells() As String = Clipboard.GetText.Split(New String() {vbCr, vbLf, vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
Dim i As Integer = 0
Dim ii As Integer = 1
For Each rowOfCells As String In copiedCells
For Each cellValue As String In rowOfCells.Split(vbTab)
LoadsDG.Rows(i).Cells(ii).Value = cellValue
ii = ii + 1
Next
i = i + 1
ii = 1
Next
End If
End Sub