none
Come eliminare una riga che contiene una cella con un valore dal foglio di lavoro di Excel usando VB.NET RRS feed

  • Domanda

  • Buongiorno 

    vorrei eliminare una riga da un foglio excel che contiene una cella con un dato valore invece che usando l'indice della riga , da una applicazione VB.NET.

    Per favore qualcuno puo indicarmi qualche tutorial o soluzione?

    Io ho trovato questo codice molto interessante ma usa l'indice della riga , io invece devo usare una stringa contenuta in una cella.

    Option Strict On
    Option Infer On
    
    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Microsoft.Office
    Imports System.Runtime.InteropServices
    Module Delete_RowCode
        ''' <summary>
        ''' Remove row by ordinal index
        ''' </summary>
        ''' <param name="FileName">full-path and filename</param>
        ''' <param name="SheetName">worksheet to work on</param>
        ''' <param name="RowIndex">Row number to remove</param>
        ''' <remarks></remarks>
        Public Sub ExcelRemoveRow(ByVal FileName As String, ByVal SheetName As String, ByVal RowIndex As Int32)
    
            Dim Proceed As Boolean = False
    
            Dim xlApp As Excel.Application = Nothing
            Dim xlWorkBooks As Excel.Workbooks = Nothing
            Dim xlWorkBook As Excel.Workbook = Nothing
            Dim xlWorkSheet As Excel.Worksheet = Nothing
            Dim xlWorkSheets As Excel.Sheets = Nothing
            Dim xlRange1 As Excel.Range = Nothing
    
            xlApp = New Excel.Application
            xlApp.DisplayAlerts = False
            xlWorkBooks = xlApp.Workbooks
            xlWorkBook = xlWorkBooks.Open(FileName)
    
            xlApp.Visible = False
    
            xlWorkSheets = xlWorkBook.Sheets
    
            For x As Integer = 1 To xlWorkSheets.Count
                xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet)
    
                If xlWorkSheet.Name = SheetName Then
                    Proceed = True
                    Exit For
                End If
    
                Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet)
                xlWorkSheet = Nothing
    
            Next
    
            If Proceed Then
                xlRange1 = CType(xlWorkSheet.Rows(RowIndex), Excel.Range)
                xlRange1.Delete()
                Marshal.FinalReleaseComObject(xlRange1)
                xlRange1 = Nothing
    
    
                xlWorkSheet.SaveAs(FileName)
            Else
                ' IMPORTANT NOTE
                ' For production throw an exception, for demoing a message
                ' This demo the only way the sheet does not exists if someone
                ' really tried to mess with this code outside with MS-Excel.
                '
                MessageBox.Show(SheetName & " not located.")
            End If
    
            xlWorkBook.Close()
            xlApp.UserControl = True
            xlApp.Quit()
    
    
            ReleaseComObject(xlWorkSheets)
            ReleaseComObject(xlWorkSheet)
            ReleaseComObject(xlWorkBook)
            ReleaseComObject(xlWorkBooks)
            ReleaseComObject(xlApp)
        End Sub
        Private Sub ReleaseComObject(ByVal obj As Object)
            Try
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
                obj = Nothing
            Catch ex As Exception
                obj = Nothing
            End Try
        End Sub
    End Module

    Grazie mille

    giovedì 5 dicembre 2019 12:31

Risposte

  • Se esiste una sola cella con quel valore usa il metodo find per trovare la cella, poi ricavi la riga con .row e la cancelli

    in VBA sarebbe qualcosa del genere

      Tofind = "stringa"
      Set c = ActiveSheet.UsedRange.Find(Tofind, LookIn:=xlValues)
      If Not c Is Nothing Then Rows(c.Row).Delete

    giovedì 5 dicembre 2019 15:57

Tutte le risposte

  • Se esiste una sola cella con quel valore usa il metodo find per trovare la cella, poi ricavi la riga con .row e la cancelli

    in VBA sarebbe qualcosa del genere

      Tofind = "stringa"
      Set c = ActiveSheet.UsedRange.Find(Tofind, LookIn:=xlValues)
      If Not c Is Nothing Then Rows(c.Row).Delete

    giovedì 5 dicembre 2019 15:57
  • Ciao patel45 grazie per la risposta

    ho provato ma in vb.net non funziona forse perchè è vba , però è vero che trovando e passando il parametro dell'indice della riga dovrebbe funzionare non so come ho fatto a non pensarci prima.

    Grazie e a presto

    Fabrizio

    sabato 7 dicembre 2019 14:25