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

    [C#]leggere file xlsx con c# e ado.net

    Ciao a tutti.
    Ho un quesito da porvi...stavo facendo un programmino stupido di estrazione di dati e devo prendere alcune informazioni da un file excel xlsx. Ho provato a fare una cosa del genere:

    Creo la funzione che mi ritorna la stringa di connessione:
    codice:
    private static string setConnectionStringXlsx(string filename) 
            {
                return @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=Excel 12.0 xml;HDR=YES";
            }
    faccio la funzione che ritorna il data reader:
    codice:
    public static OleDbDataReader readExcelFile(string query, string filename) 
            {
                var connectionString = setConnectionStringXlsx(filename);
    
                var connection = new OleDbConnection(connectionString);
    
                using (var cmd = new OleDbCommand(query, connection)) 
                {
                    connection.Open();
    
                    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
    Ma mi solleva un'eccezione "Impossibile trovare l'ISAM installabile" quando faccio il connection.Open()...qualcuno sa il motivo / possibili soluzioni?

    Ho provato anche a utilizzare il provider JET al posto di ACE e a mettere 8.0 al posto di 12.0 alla versione di Excel ma l'eccezione che solleva è "Nessun valore specificato per alcuni parametri necessari"

    Grazie a tutti!

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Devi usare l'automazione ed il Late-Binding, altrimenti il tuo codice funzionerà SOLO nei computer in cui è installata la versione di Office che usi tu.
    Ovviamente, devi prendere anche atto che il formato XLSX è usabile solo se nel computer c'è Office 2007 o versione superiore, per cui dovrai leggere il numero di versione installata sul pc, prima di proseguire perchè è ovvio che se c'è Office 2003, non potrai aprire un un file di Office 2007 (o sup.) ed in questo caso devi prevedere l'installazione dei runtime di Office 2007/2010.

    Vedi gli esempi sul mio sito sia con Excel che Word (come pure i link).
    Non ricordo se sono tutti anche in C# (in genere li faccio in entrambi i linguaggi) ma se anche non fosse è il concetto che conta, e che troverai molto utile.
    Comunque il codice è davvero banale e tradurlo è semplicissimo.

    Early-Late Binding in VB.NET e Excel
    http://nuke.vbcorner.net/Progetti/NE...T/Default.aspx

    Early-Late Binding in VB.NET e Word
    http://nuke.vbcorner.net/Progetti/NE...T/Default.aspx


  3. #3
    Ciao...grazie mille do subito un occhio...tieni conto che è un programmino stupido che mi serve per un'estrazione di dati e che quindi non andrà in produzione, proprio per questo stavo cercando di utilizzare oledb perchè gia avevo una classettina che faceva quello che mi serviva.

    il problema grosso sta che questo file excel mi è stato passato e non riesco a convertirlo in un xls normale perchè mi perde circa metà dei record.

    Intanto grazie mille dell'aiuto

  4. #4
    Ehm...ho risolto...però rischio il linciaggio per l'errore stupido che era..

    Praticamente la mia stringa di connessione era:
    codice:
    @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=Excel 12.0 xml;HDR=YES";
    semplicemente mancavano le virgolette alle Extended Properties, quindi quella corretta è:
    codice:
    @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0 xml;HDR=YES'";
    Scusate per la perdita di tempo e grazie per l'aiuto

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.