asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 5550
ASPCode.it - Store

  > > Articoli

Leggere dati da Excel con OleDB

Data di pubblicazione: 10/11/2004        Voto della community: 4,25 (Votanti: 32)

Che Microsoft Excel sia probabilmente il foglio di calcolo commerciale più potente disponibile sul mercato è un fatto noto. Meno noto è, invece, il fatto che Excel possa essere utilizzato come un "contenitore di dati" che possono essere letti, manipolati ed aggiornati come se si trattasse di un vero e proprio database.
In questo articolo consideriamo Excel proprio in questi termini, come una sorta di database dal quale reperire informazioni. La struttura di un foglio di lavoro Excel, costituita da righe e colonne, in effetti assomiglia molto ad una normale tabella di un database.
Questo ci permette di eseguire query in linguaggio SQL del tutto analoghe a quelle che eseguiremmo su un database:

SELECT * FROM [Foglio1$]

Prima di effettuare la nostra query, dobbiamo aprire una connessione verso il foglio di lavoro. A questo scopo, utilizziamo il driver Microsoft Jet OleDb 4.0 utilizzando le classi disponibili nei namespace System.Data e System.Data.OleDb.
Vediamo la sintassi C#.NET per compiere questa operazione di lettura di dati da Excel:

namespace Peppe.Articoli
{
  using System;
  using System.Data;
  using System.Data.OleDb;

  public class LeggiDaExcel
  {
    private OleDbConnection conn = null;
    private OleDbDataReader rd = null;

    public static void Main()
    {
      string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;";
      strConn += "Data Source=miofile.xls;";
      strConn += "Extended Properties=\"Excel 8.0;\"";
      conn = new OleDbConnection(strConn);
      string sql = "SELECT * FROM [Foglio1$]";
      OleDbCommand cmd = new OleDbCommand(sql, conn);
      try
      {
        conn.Open();
        rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        while(rd.Read())
        {
          Console.WriteLine(rd["miaColonna"].ToString());
        }
        rd.Close();
      }
      catch(Exception exe)
      {
        Console.WriteLine(exe.Message);
      }
    }
  }
}

In questa procedura, per "miaColonna" si intende il testo inserito all'interno della cella di intestazione della colonna da cui vogliamo estrarre i dati, da non confondersi con il nome vero e proprio della cella (ovvero A1, B1, ecc.).
Chiaramente questo codice può essere personalizzato passando come parametri sia il nome del file .xls da interrogare, sia il nome del foglio di lavoro.
Inoltre, potrebbe essere molto utile effettuare la stessa operazione in una WebForm ASP.NET, ed applicare il risultato della nostra query ad un controllo DataGrid, DataList o DataRepeater. L'unica differenza rispetto a quanto abbiamo già visto, sta nella definizione della stringa di connessione al foglio di lavoro Excel. Infatti, nelle applicazioni ASP.NET per fare riferimento al documento mioFile.xls dobbiamo richiamare il metodo Server.MapPath("mioFile.xls") in modo da ottenere il percorso fisico del file.

<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

  private OleDbConnection conn = null;
  private OleDbDataReader rd = null;

  public void page_Load(object sender, EventArgs e)
  {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;";
    strConn += "Data Source="+Server.MapPath("mioFile.xls")+";";
    strConn += "Extended Properties=\"Excel 8.0;\"";
    conn = new OleDbConnection(strConn);
    string sql = "SELECT * FROM [Foglio1$]";
    OleDbCommand cmd = new OleDbCommand(sql, conn);
    try
    {
      conn.Open();
      rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      dg.DataSource = rd;
      dg.DataBind();
      rd.Close();
    }
    catch(Exception exe)
    {
      lbl.Text = exe.Message+exe.StackTrace;
    }
  }
</script>
<html>
  <head>
    <title>Lettura dati da Excel</title>
  </head>
  <body>
    <form runat="server">
      <h2>Lettura dati da Excel</h2>
      <br /><br />
      <asp:DataGrid id="dg" runat="server" />
      <br /><br />
      <asp:Label id="lbl" runat="server" />
    </form>
  </body>
</html>

In un prossimo articolo, vedremo come creare un nuovo foglio di lavoro Excel, utilizzando codice C# e la sintassi delle semplici tabelle HTML!

Si ringrazia PeppeDotNet.it per la gentile concessione dell'articolo.




Utenti connessi: 5550