Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB.NET] Lettura file csv con Oledb

    Ciao a tutti!
    sto realizzando qualche linea di codice con visual studio 2010 per leggere un file csv e selezionare una parte dei dati e visualizzarli. Grosso problema poichè se il file che voglio avere è di tipo xlsx il codice funziona,ma se è di tipo csv manco a pagarlo! continua a darmi lo stesso errore:
    "Errore:La tabella esterna non è nel formato previsto."
    Vi posto la sezione di codice incriminata perchè non so che stringa di connessione sia corretta per farlo funzionare:
    codice:
    Dim comm As OleDbCommand = New OleDbCommand("Select * from [Foglio1$];")
            Dim excelLettura As OleDbDataReader
            'Imposto la stringa di connesisione
            Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileNameAndPath + ";Extended Properties=""Excel 12.0 Xml;HDR=NO;FMT=Delimited;IMEX=1""")
                '
                Try
                    'apro la connessione ed eseguo la query
                    conn.Open()
                    comm.Connection = conn
                    excelLettura = comm.ExecuteReader()
                    'per ogni record che trovo visualizzo a video il risultato
                    Dim Nome As String = ""
                    Dim Cognome As String = ""
                    While (excelLettura.Read())
                        Nome = excelLettura.Item(0)
                        MessageBox.Show(Nome)
                    Application.DoEvents()
                    End While
                    excelLettura.Dispose()
                    comm.Dispose()
                Catch ex As Exception
                    MessageBox.Show("Errore: " + ex.Message)
                Finally
                    'chiudo la connessione
                    If (conn.State = ConnectionState.Open) Then conn.Close()
                End Try
            End Using
    Ho letto molti post in giro su questo problema ma non sono riuscito a capire una soluzione effettiva..spero possiate aiutarmi!!grazie!!

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ma come puoi pensare di aprire un file csv con quelle istruzioni?
    E' ovvio che non funzionano.
    il file CSV è un file di testo (delimitato), e va aperto come tale.

  3. #3

    Moderazione

    Nel titolo va specificato il linguaggio di riferimento anche come "tag"; inoltre, il codice va formattato tra tag [code] ... [/code], altrimenti perde l'indentazione. Qui ho sistemato io, ricordatene in futuro.


    Originariamente inviato da gibra
    Ma come puoi pensare di aprire un file csv con quelle istruzioni?
    E' ovvio che non funzionano.
    il file CSV è un file di testo (delimitato), e va aperto come tale.
    Oddio, mi pare che in teoria esista un connettore OLE DB fornito da Excel che ti fornisce accesso ad un CSV come da un DB, ma non saprei dire né quanto bene funzioni né se sia un'idea sensata usarlo in questo caso...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    scusate per i cavilli da forum che non ho utilizzato imparerò per la prossima volta..innanzitutto grazie delle risposte,tornando al post: beh provo a spiegarvi meglio..un software di terze parti butta fuori dei file di log in formato csv e che,dato che sono log presenti su alcuni impianti sparsi per l'europa,vengono aperti di default con excel da tutte le parti..ora se come dice gibra questo codice non funziona, che costrutto devo usare?io credevo che anche se il formato è csv si potesse utilizzare lo stesso codice per aprire gli xlsx di excel dato che come ho detto si aprono così. devo quindi fregarmene del fatto che sono aperti di default con excel e utilizzare un costrutto simile a un file di testo? scusate l'ignoranza ma come si è capito non sono una cima grazie delle risposte!

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da matteoMag
    beh provo a spiegarvi meglio..
    direi che è meglio.

    Originariamente inviato da matteoMag
    un software di terze parti butta fuori dei file di log in formato csv e che,dato che sono log presenti su alcuni impianti sparsi per l'europa,vengono aperti di default con excel da tutte le parti..
    Chiarisci: Da tutte le parti cosa significa?

    Originariamente inviato da matteoMag
    ora se come dice gibra questo codice non funziona, che costrutto devo usare?io credevo che anche se il formato è csv si potesse utilizzare lo stesso codice per aprire gli xlsx di excel dato che come ho detto si aprono così.
    Non è così.
    Excel ha la funzionalità di aprire un file CSV, ma è interna e non è automatica, anche perchè Excel 'soffre' di alcuni problemi quando si importano file non Excel.
    Ad esempio: tronca gli zeri davanti, formatta le date, ecc. cose che per 'noi programmatori' sono deleterie.
    Pensiamo ad esempio ai numeri di Partita IVA, oppure i Codici che senza gli zero davanti perdono il loro vero significato.



    Originariamente inviato da matteoMag devo quindi fregarmene del fatto che sono aperti di default con excel e utilizzare un costrutto simile a un file di testo? scusate l'ignoranza ma come si è capito non sono una cima grazie delle risposte!
    Sì e No.
    A parte il fatto che tu usando:

    "Select * from [Foglio1$];"

    tu stai comandando Excel di leggere i dati dal Foglio1, mentre tu hai un file CSV,
    bisogna vedere la struttura di questo file CSV perchè, purtroppo, NON è sempre vero che è davvero formattato come un CSV, ma piuttosto come un file di testo delimitato che può essere perciò strutturato in maniera diversa.
    Ad esempio
    - il separatore potrebbe essere la vrigola ma anche il carattere tabulazione
    - i valori potrebbero non essere racchiusi, oppure essere racchiusi tra apici, o doppi apici

    La cosa più intelligente che puoi fare è:
    - Apri Excel
    - avvia la registrazione di una macro
    - vai ad aprire il file come file *.CSV
    - imposta tutti i parametri (separatore, delimitatore, ecc.)
    - quando hai caricato il file in Excel, se ti soddisfa come lo vuoi tu, termina la registrazione della macro.
    - adesso vai su Macro - Modifica ed otterrai il codice VBA completo
    - ora ti basta tradurlo in VB.NET

    Per aiutarti, ecco due link che mostrano come fare (il secondo è senza dubbio migliore e più completo):
    Creating an Excel sheet from a CSV file in VB.Net
    http://www.mindfiresolutions.com/Cre...VBNet-1028.php

    Import a CSV File Into an Excel Workbook Programmatically - CodeProject
    http://www.codeproject.com/Tips/1364...book-Programma

    In entrambi i casi, è necessario utilizzare l'oggetto Excel.Application.
    Per fare questo ti raccomando caldamente di leggerti PRIMA il mio articolo:
    VS2010 - Early-Late Binding in VB.NET + Excel
    http://nuke.vbcorner.net/Progetti/NE...T/Default.aspx
    ed usare la tecnica che descrivo.
    Ti salverà la vita perchè il codice funzionerà anche con versioni diverse di Office.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.