Leggere e scrivere su file excel usando vb.net

di Anonimizzato20961 il
5 risposte
Buongiorno, sono alle prime armi con vb.net.
Devo creare un' App desktop e in un form ho bisogno che quando schiaccio un bottone:
-si apra un file excel
-si cerchi la prima riga vuota
-si possa scrivere in quella riga
-si salvi il file (per ora salvo su un file diverso perchè non so come farglielo salvare su se stesso. Se glielo passo per riferimento mi da un errore)
Per aprire il file ho creato una funzione che poi richiamo, e questa funziona. Per il resto so che serve un ciclo per leggere le righe piene del file ma c'è qualcosa che sbaglio
Riporto di seguito i codici:
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

5 Risposte

  • La funzione OpenExcel() dovrebbe restituire SOLO il nome del file selezionato.
    Perché l'hai infarcita di tutto quel po-po di dichiarazioni inutili (....Interop.... )?

    In Button2, poi, usi il riferimento a Microsoft.Office ... (inutilmente) e quindi complichi tutto (inutilmente) mescolando insieme late-binding e early-binding.

    Devi comunque spiegare quali errori ricevi, e dove li ricevi.
  • Scusa, non ho ben capito quello che intendi..ho provato a leggere anche delle guide ma non riesco a trovarne una chiara.
    L'errore che mi da è su questo

    UR = oSheet1.Range("A" & oSheet1.Rows.Count).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row

    e per quello che ho capito riguarda l'interoperabilità.

    Sai suggerirmi un codice migliore per scrivere quello che voglio fare?
  • Non esiste un 'codice migliore', esiste il codice corretto o sbagliato.

    Guarda il progetto linkato nella mia firma su Office Automation in NET: VS2010 - Early-Late Binding
  • gibra ha scritto:


    Non esiste un 'codice migliore', esiste il codice corretto o sbagliato.

    Guarda il progetto linkato nella mia firma su Office Automation in NET: VS2010 - Early-Late Binding
    Grazie, link fatto molto bene!
Devi accedere o registrarti per scrivere nel forum
5 risposte