我与vb.net中的excel连接时有问题。当我通过单元格循环以在表格中找到最后的非空行时,当我将空单元的值与"我接收错误:NullReferenceException
捕获的时刻。对象引用未设置为对象的实例。"
有一个代码片段:
Dim xlApp As New Excel.Application
Dim xlWb As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim lRow As Integer = 1
Dim excelFilePath As String
Using FileDialog As New OpenFileDialog
FileDialog.Title = "Please choose Excel file with XXX"
FileDialog.FileName = ""
FileDialog.ShowDialog()
excelFilePath = FileDialog.FileName
End Using
xlApp.Visible = True
xlWb = xlApp.Workbooks.Open(excelFilePath)
xlsheet = xlWb.Sheets("Sheet1")
Do While xlsheet.Cells(lRow, 3).value.ToString() <> ""
lRow += 1
Loop
我尝试在多次调整到xlsheet.cells(lrow,3)的情况下进行更改。值等。但是我总是失败 - 使其工作的唯一方法是通过尝试 - 捕捉,但我想知道我的做错了以及如何以正确的方式修复它?
好吧,您可以做的一件事是使用String.IsNullOrEmpty
,因此Do
环路看起来像这样:
Do While String.IsNullOrEmpty(xlsheet.Cells(lRow, 3).value) = False
lRow += 1
Loop
,但这可能会使您进入无限循环,因此您可以考虑使用For Next
:
您应该首先获取最后一个使用的行:
Dim lastRow As Integer = xlsheet.Cells(xlsheet.Rows.Count, 3).End(Excel.XlDirection.xlUp).Row
'Then use the loop:
For x = 1 To lastRow
If String.IsNullOrEmpty(xlsheet.Cells(x, 3).value) = False Then
'Do something
End If
Next
,如果您的主要目的是获取最后一个使用的行,则不必循环循环行。您可以使用此行:
Dim lastRow As Integer = xlsheet.Cells(xlsheet.Rows.Count, 3).End(Excel.XlDirection.xlUp).Row
希望有帮助:)
excel中的一个空单元的值无需
将循环更改为如下
Do While xlsheet.Cells(lRow, 3).value IsNot Nothing
lRow += 1
Loop
您提出的行是第一个空牢房, lrow-1
是该列中的最后一个非空单元
当我循环通过细胞循环以在内部找到最后的非空行 床单,
为了做到这一点