Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30

    Come esportare dati su Excel in c#?

    Salve,
    dovrei creare una funzionalità per estrarre dati da un db e copiarli su diversi fogli di un documento excel (che deve aprirsi sul lato client).

    Ho dato un'occhiata un pò in giro per il forum ed ho visto diverse soluzioni.

    Vorrei sapere quale mi consiglite di seguire, non ho molta esperienza.

    Ho la necessità di incollare su excel più di 2000 righe di voci, avrei la possibilità di copiare i dati direttamente da una GridView (qualora facilitasse le cose), ho letto che è anche possibile incollare su excel come se si lavorasse su un DB, sarebbe un'ottima soluzione .

    Attendo vostri consigli, grazie.

  2. #2
    Se devi estrarre 2000 righe penso che dovrai visualizzare qualcosa di simile ad una tabella di un database. In questo caso, come fai notare anche te, tanto vale usare Excel come se fosse un db engine.

    Creare un file excel utilizzando Ado.Net è semplicissimo, ti consiglio di dare uno sguardo a questo post:
    Scrivere Files Excel Con Ado.Net

    Lo script nel post è in VB.NET ma dovrebbe essere banale tradurlo in C#. Allo stesso modo è molto semplice sostituire al ciclo for di esempio un ciclo che legga il contenuto di una DataTable.
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Grazie mille per il tuo interessamento , il link che mi hai passato è interessantissimo, provo subito a convertire lo script in cà e ti faccio sapere.

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Originariamente inviato da simo
    Se devi estrarre 2000 righe penso che dovrai visualizzare qualcosa di simile ad una tabella di un database. In questo caso, come fai notare anche te, tanto vale usare Excel come se fosse un db engine.

    Creare un file excel utilizzando Ado.Net è semplicissimo, ti consiglio di dare uno sguardo a questo post:
    Scrivere Files Excel Con Ado.Net

    Lo script nel post è in VB.NET ma dovrebbe essere banale tradurlo in C#. Allo stesso modo è molto semplice sostituire al ciclo for di esempio un ciclo che legga il contenuto di una DataTable.

    Ok,
    sono riuscito a farlo scrivere su excel, ma il file deve comparire visualizzato dal lato client, dando la possibilità all'utente di salvarlo, come fare?

    Grazie ancora

  5. #5
    Al termine della procedura che genera il file excel, fai un semplice
    codice:
    response.redirect("nuovofilecreato.xls")
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Originariamente inviato da simo
    Al termine della procedura che genera il file excel, fai un semplice
    codice:
    response.redirect("nuovofilecreato.xls")
    Grazie mille simo,
    mi sei stato di grande aiuto .

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Salve,
    ho un nuovo problema, avrei l'esigenza di svuotare il file ogni volta che qualcuno clicca sul pulsante di estrazione, perchè altrimenti ogni volta i dati vengono concatenati e non è quello che voglio. Qui il mio script:

    codice:
    protected void ScriviSuExcel(object sender, EventArgs e)
        {
            string path = "path file excel";
            StreamWriter sw = new StreamWriter("path file eccezioni");
            OleDbConnection connection = null;
            OleDbCommand command = null;
            string queryString = null;
            int cont = 0;
    
            queryString = "query1";
            DataSet data = new DataSet();
            data = GetData(queryString);  
            
            connection = new OleDbConnection();
            command = new OleDbCommand();
           
            try
            {
                
                connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties = 'Excel 8.0;HDR=YES;' ";
                connection.Open();
    
                command.Connection = connection;
                command.CommandText = "DELETE FROM [Foglio1$]";
                command.ExecuteNonQuery(); 
    
                while (data.Tables[0].Rows.Count > cont)
                {
                    
                    command.CommandText = "INSERT INTO [Foglio1$] (Campo1,Campo2) VALUES ('" + data.Tables[0].Rows[cont]["Campo1"].ToString() + "','" + data.Tables[0].Rows[cont]["Campo2"].ToString() + "')";
                    command.ExecuteNonQuery();
                    cont++;
                }
    
                command.Dispose();
                command = null;
                connection.Dispose();
                connection = null;
    
                HttpContext.Current.Response.Redirect("./file.xls");
                Response.Redirect("file.xls");
                
                sw.Close();
            
            }
            
             catch (Exception e1)
             {
                
                sw.WriteLine("Exception: " + e1.Message);
                sw.WriteLine("Query: "+ command.CommandText);
                sw.Close();
                connection.Close();
    
              }
        }
    Ho provato ad inserire una delete sul foglio prima di cominciare a ciclare il dataset, ma l'applicazione va in Exception riportando il seguente messaggio:

    codice:
    Exception: Deleting data in a linked table is not supported by this ISAM.
    Query: DELETE FROM [Foglio1$]
    l'alternativa sarebbe mantenere un template dell'excel originario e ricopiarlo ogni volta che lancio lo script, ma vorrei prima capire se c'è un modo di svuotare l'excel.

    Cercasi suggerimenti, grazie.

  8. #8
    Io personlamente uso la soluzione di un file modello formattato
    che duplico ogni volta che ho necessità di creare un report
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Originariamente inviato da simo
    Io personlamente uso la soluzione di un file modello formattato
    che duplico ogni volta che ho necessità di creare un report
    Ciao simo,
    grazie per la grande tempestività,alla fine ho seguito questa strada , era giusto una curiosità personale.

    Purtroppo i problemi si susseguono, adesso l'eccezione sollevata è la seguente:


    codice:
    Exception: The field is too small to accept the amount of data you attempted to add.  Try inserting or pasting less data.
    questo avviene su uno specifico campo in cui a volte il testo è molto lungo. C'è un modo per aumentare la capienza delle celle su excel? Ogni soluzione va bene.

    Grazie ancora.

  10. #10
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Ho provato questa soluzione ma, stranamente mi continua a dire che la tabella non è nel formato specificato..

    Eppure le colonne hanno lo stesso nome e il foglio è sempre il "foglio 1"..

    Per il resto il codice è lo stesso di quello di sillian..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.