LEGGERE E IMPORTARE ALCUNE LINEE DA FILE XLS

di ribelle il
16 risposte

Salve ho un file .xls con alcune righe all'interno

Dovrei leggerlo e qualora in una determinata riga/cella ci fosse una data devo estrarre l'intera linea per poi salvarla un una tabella di una tabella di un db

quindi la condizione è “se la cella x contiene /” allora esegui operazione

devo poi concatenare i campi dividendoli con il carattere | o ; per salvarli in una linea sola

Il problema è come aprire il file xls, leggere e far scorrere le linee fino alla fine.

P.S. per quelli di testo ho usato stramreader.

Grazie

16 Risposte

  • No, un file xls e' un “compound file”, una specie di ZIP , contenente SIA dati, SIA una struttura gerarchica.

    Non lo puoi leggere con un semplice stream reader, serve usare una libreria dedicata alla manipolazione di questo tipo di file. 

    No, non lo puoi implementare tu, e' PARECCHIO complesso. 

    Altro discorso se converti il XLS  in un CSV (Comma Separated Value), un semplice file di testo che puoi leggere riga per riga.

  • Ti ha già risposto @migliorabile in modo eccellente,
    io aggiungo solo che per leggere/scrivere files XLS e XLSX io utilizzo la libreria NPOI che trovi su Nuget, e mi trovo benissimo

  • Grazie 1000 ora provo o cercerò un convertitore per csv ed  anche una guida per NPOI

  • Puoi usare

    Office.Interop

    https://learn.microsoft.com/it-it/previous-versions/office/troubleshoot/office-developer/automate-excel-from-visual-basic-net

  • Provato NPOI ma mi restituisce il seguente errore:

  • Ma stai tentando di leggere un file XLS o XLSX ??
    Il NPOI.XSSF si usa per i files XLSX, mentre il NPOI.HSSF si usa per i files XLS
    (e nel messaggio di errore c'era pure scritto)

  • Quindi per esempio come dovrei riadattare il codice a seguito per un xls?

    
            Dim srtFile As String = "e:\res.xlsx"
            'MsgBox("open")
            Dim objBook As New NPOI.XSSF.UserModel.XSSFWorkbook(srtFile)
            Dim intSheets As Integer = objBook.NumberOfSheets
            'MsgBox(intSheets & "trovati")
            Dim objSheet As NPOI.XSSF.UserModel.XSSFSheet
            objSheet = objBook.GetSheetAt(1)
            'MsgBox("nome: " & objSheet.SheetName)
            Dim IntRow As Integer = objSheet.PhysicalNumberOfRows
            'MsgBox("righe: " & IntRow)
    
    
            Dim objRow As NPOI.XSSF.UserModel.XSSFRow
            Dim objCell As NPOI.XSSF.UserModel.XSSFCell
            Dim dblValue As Double
            Dim strValue As String
            Dim strLine As String
  • Infatti il mio file è XLS quindi dovrei riadattare la struttura

  • Fallo

    P.S. se vuoi usare questa libreria. Altrimenti, come ti dicevo, segui la via Microsoft con Office.Interop

  • Provato il link ma l'estrazione che fa non è da un file  .xls ma da un tabella creata in memoria e riletta. 

  • Ovviamente (forse non lo era abbastanza…) nel link c'è un esempio di utilizzo della libreria ma NON quello che serve a te nello specifico.

    MA studiando e utilizzando quella libreria puoi accedere al file .xls e fare quello che vuoi.

    Ci vuole un minimo di indagine e studio, nulla è gratis

  • Ovviamente (forse non lo era abbastanza…) nel link c'è un esempio di utilizzo della libreria ma NON quello che serve a te nello specifico.

    L'idea era di indicarti la LIBRERIA da studiare e utilizzare, non darti il codice pronto.

    Studiando e utilizzando quella libreria puoi accedere al file .xls e fare quello che vuoi.

    Opening a Workbook

    https://learn.microsoft.com/en-us/visualstudio/vsto/how-to-programmatically-open-workbooks?view=vs-2022&tabs=vb

    Ci vuole un minimo di indagine e studio, nulla è gratis

    P.S. Fra l'altro avevi già usato Office.Interop in questa tua discussione

    https://www.iprogrammatori.it/forum-programmazione/vbnet/esportare-solo-alcuni-dati-una-datagridview-file-excel-t50322.html

  • 02/05/2024 - ribelle ha scritto:


    Quindi per esempio come dovrei riadattare il codice a seguito per un xls?   

    Come ti ho già detto prima, al posto di XSSF prova a mettere HSSF

Devi accedere o registrarti per scrivere nel forum
16 risposte