【发布时间】:2018-07-17 22:05:38
【问题描述】:
我有这段代码,用于在 KeyDown 事件下粘贴到我的 datagridview 中:
If e.Control AndAlso e.KeyCode = Keys.V Then
Try
For Each line As String In Clipboard.GetText.Split(vbNewLine)
If Not line.Trim.ToString = "" Then
Dim item() As String = line.Trim.Split(vbTab)
Me.Datagridview1.Rows.Add(item)
End If
Next
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
粘贴数据效果很好,问题是当我将空白单元格粘贴到 datagridview 时,它会忽略一些空白并用内容移动单元格。
Example when i paste this:
Column1 Column2 Column3 Column4
Row1 a b d
Row2 f g
This is what i get:
Column1 Column2 Column3 Column4
Row1 a b d
Row2 f g
有谁知道我做错了什么或如何改进我的代码?
【问题讨论】:
-
您将在“复制”方面遇到问题。我的测试表明,如果 Excel 中的单元格为空,则复制命令 (Ctrl-C) 将“忽略”这些单元格。例如,如果一行中只有一 (1) 个项目并且所有其他单元格都是空的,则会产生问题。您将无法分辨单元格属于“哪个”列。
-
因此,我认为你不能用简单的“Ctrl-C-V”(复制-粘贴)来做到这一点,而无需在 Excel 中做一些事情来使“空”单元格不为空……在至少从复制粘贴的角度来看。您可以考虑使用“Interop”或其他第三方 Excel 库来完成此操作。
-
让我澄清我的第一条评论。它应该是……对于每个 Excel 行,当您在 Excel 中“复制”(Ctrl-C)一个选择时,它将忽略第一个包含数据的非空单元格之前的所有空单元格,并且它还将忽略最后一个之后的所有空单元格该行中包含数据的非空单元格。如果在第一个带有数据的单元格和最后一个带有数据的单元格之间有一个空单元格……它将获得那些空单元格。我希望这是有道理的。
-
这正是我对空单元格的问题。
-
使用@Pavlinll solution Dim item() As String = line.Split(vbTab(0)) 找到了一个解决方案,在我的代码中我使用的是 line.TRIM.Split,我删除了 TRIM 和问题已解决,感谢您的帮助。
标签: excel vb.net datagridview