使用vb.net读取Excel文件并查找第一个空单元格

使用vb.net读取Excel文件并查找第一个空单元格,excel,vb.net,Excel,Vb.net,我必须创建一个桌面应用程序。 我使用Visual studio 2015和Excel 我必须: -打开excel文件 -找到第一个空行 -在该行中写入新数据 -保存该文件(目前我只能创建一个新文件。我不知道如何更新和保存打开的文件) 在我打开文件之前它一直工作。。 非常感谢。 这是我编写的用于打开文件的函数: Public Function OpenExcel(filename As String) As Object Dim retval As Object = Nothing

我必须创建一个桌面应用程序。 我使用Visual studio 2015和Excel 我必须: -打开excel文件 -找到第一个空行 -在该行中写入新数据 -保存该文件(目前我只能创建一个新文件。我不知道如何更新和保存打开的文件) 在我打开文件之前它一直工作。。 非常感谢。 这是我编写的用于打开文件的函数:

Public Function OpenExcel(filename As String) As Object
        Dim retval As Object = Nothing
        Try
            Dim excel As Microsoft.Office.Interop.Excel.Application
            Dim wb As Microsoft.Office.Interop.Excel.Workbook
            Dim ws As Microsoft.Office.Interop.Excel.Worksheet
            excel = New Microsoft.Office.Interop.Excel.Application
            wb = excel.Workbooks.Open(filename)
            excel.Visible = False
            wb.Activate()
            ws = wb.Worksheets.Item(1)
            ws = excel.ActiveSheet
            retval = ws.Cells(1, 1).value

        Catch ex As exception

        End Try
    End Function
这是我代码的第一部分

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim dialogo As OpenFileDialog
        dialogo = New OpenFileDialog()
        dialogo.ShowDialog()
        Dim ds As Object = f.OpenExcel(dialogo.FileName)

 Dim oExcel As Object
        oExcel = CreateObject("Excel.Application")
        Dim oBook As Object
        Dim oSheet1 As Object

        oBook = oExcel.Workbooks.Add()
        oSheet1 = oBook.Worksheets(1)

        oBook = oExcel.ActiveWorkbook

        Dim UR As Integer = 0
        UR = oSheet1.Range("A" & oSheet1.Rows.Count).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
        For rr = 1 To UR
            If oSheet1.Range("A" & rr).Value = ("") Then
                oSheet1.Range("A" & rr).value = "text1"
            Else
                MsgBox("box pieno")
            End If
        Next rr

oExcel.DisplayAlerts = False
        oBook.SaveAs("C:\Users\an\Desktop\New" & ".xlsx")
        oBook.Close()
        oBook = Nothing
你差点就成功了

你的函数已经打开了文件;只需将其更改为返回工作簿

Public Function OpenExcel(ByVal filename As String) As Object
    Dim excel As Microsoft.Office.Interop.Excel.Application
    Dim wb As Microsoft.Office.Interop.Excel.Workbook
    excel = New Microsoft.Office.Interop.Excel.Application
    excel.Visible = False
    wb = excel.Workbooks.Open(filename, ReadOnly:=False)
    excel.Visible = False
    Return wb
End Function
(顺便说一句,在这里处理异常并不是一个好主意,除非您返回“状态”值或默认文件。让调用方处理异常)

…然后更改其余代码并保存已打开的书本

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim dialogo As OpenFileDialog
    dialogo = New OpenFileDialog()
    dialogo.ShowDialog()
    Dim oBook As Microsoft.Office.Interop.Excel.Workbook
    Dim oSheet1 As Object

    Try
        oBook = OpenExcel(dialogo.FileName)
    Catch ex As Exception
        'handle your exception here
        Exit Sub
    End Try

    oSheet1 = oBook.Worksheets(1)

    Dim UR As Integer = 0
    UR = oSheet1.Range("A" & oSheet1.Rows.Count).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
    For rr = 1 To UR
        If oSheet1.Range("A" & rr).Value Is Nothing OrElse oSheet1.Range("A" & rr).Value.ToString() = ("") Then
            oSheet1.Range("A" & rr).value = "text1"
        End If
    Next rr

    Dim excel = oBook.Application

    oBook.Save()
    oBook.Close()
    excel.Quit() 'This is important: as your application is not visible, it would stay on memory until reboot or shutdown if you don't close it here
    oBook = Nothing
End Sub
你差点就成功了

你的函数已经打开了文件;只需将其更改为返回工作簿

Public Function OpenExcel(ByVal filename As String) As Object
    Dim excel As Microsoft.Office.Interop.Excel.Application
    Dim wb As Microsoft.Office.Interop.Excel.Workbook
    excel = New Microsoft.Office.Interop.Excel.Application
    excel.Visible = False
    wb = excel.Workbooks.Open(filename, ReadOnly:=False)
    excel.Visible = False
    Return wb
End Function
(顺便说一句,在这里处理异常并不是一个好主意,除非您返回“状态”值或默认文件。让调用方处理异常)

…然后更改其余代码并保存已打开的书本

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim dialogo As OpenFileDialog
    dialogo = New OpenFileDialog()
    dialogo.ShowDialog()
    Dim oBook As Microsoft.Office.Interop.Excel.Workbook
    Dim oSheet1 As Object

    Try
        oBook = OpenExcel(dialogo.FileName)
    Catch ex As Exception
        'handle your exception here
        Exit Sub
    End Try

    oSheet1 = oBook.Worksheets(1)

    Dim UR As Integer = 0
    UR = oSheet1.Range("A" & oSheet1.Rows.Count).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row
    For rr = 1 To UR
        If oSheet1.Range("A" & rr).Value Is Nothing OrElse oSheet1.Range("A" & rr).Value.ToString() = ("") Then
            oSheet1.Range("A" & rr).value = "text1"
        End If
    Next rr

    Dim excel = oBook.Application

    oBook.Save()
    oBook.Close()
    excel.Quit() 'This is important: as your application is not visible, it would stay on memory until reboot or shutdown if you don't close it here
    oBook = Nothing
End Sub

多谢各位。它可以工作,我可以在下一个单元格中写字。 但有一个问题: 在我选择文件之前,如果我检查电脑中打开的后台进程,我没有任何Excel。 我选择要打开的文件,然后 -窗户堵住了 -在后台进程中,将显示excel 现在,如果我关闭进程,然后再次按下打开按钮,它就会工作。
我不明白发生了什么

谢谢。它可以工作,我可以在下一个单元格中写字。 但有一个问题: 在我选择文件之前,如果我检查电脑中打开的后台进程,我没有任何Excel。 我选择要打开的文件,然后 -窗户堵住了 -在后台进程中,将显示excel 现在,如果我关闭进程,然后再次按下打开按钮,它就会工作。
我不明白发生了什么

谢谢。它可以工作,我可以在下一个单元格中写字。但有一个问题:在我选择文件之前,如果我检查电脑中打开的后台进程,我没有任何Excel。我选择了我想要打开的文件,窗口本身被阻塞了,在后台进程中,如果我关闭进程并再次按下打开按钮,excel现在就会出现。我不明白发生了什么事谢谢你。它可以工作,我可以在下一个单元格中写字。但有一个问题:在我选择文件之前,如果我检查电脑中打开的后台进程,我没有任何Excel。我选择了我想要打开的文件,窗口本身被阻塞了,在后台进程中,如果我关闭进程并再次按下打开按钮,excel现在就会出现。我不明白发生了什么