asp - asp.net - aspcode.it

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

  > > Articoli

Creare nuovi fogli di lavoro Excel

Data di pubblicazione: 30/11/2004        Voto della community: 3,96 (Votanti: 8)

Nel precedente articolo avevamo visto come con l'uso di una semplice sintassi SQL, qualche riga di codice C#.NET e il driver Microsoft OleDb, si riescono a leggere dati da un foglio di lavoro Excel come se si leggessero da un qualsiasi database. In questo articolo, come promesso, vediamo invece come creare da codice dei nuovi file .xls, con l'ausilio della sintassi delle tabelle html!
I lettori si chiederanno: "ma cosa c'entra l'html con Excel?!"
A prima vista sembrano effettivamente due mondi completamente diversi, ma, grazie alla grande versatilità del software Microsoft, riescono a collaborare insieme semplificando notevolmente la vita a noi programmatori. Volendo infatti, possiamo salvare in un file di testo il codice di markup html utile per la creazione di tabelle (con gli elementi table, tr, td, ...), rinominare il file con estensione .xls, e scoprire, aprendo il file, di aver creato un nuovo foglio di lavoro Excel, con tanto di dati al suo interno, formattati però come una vera e propria tabella html!

Prima di iniziare la scrittura del file, vengono dichiarati tutti gli xml-namespace (cioè gli spazi dei nomi degli elementi xml utilizzati, quindi nel nostro caso quello di office, quello di excel e quello dell'html 4.0) a noi utili per inserire degli ulteriori parametri di formattazione del nostro foglio di lavoro Excel, come ad esempio il suo nome, che dichiariamo inserendolo all'interno del tag <x:Name>mioFoglio</x:Name>, dove x, appunto, è il riferimento al namespace di excel che abbiamo così dichiarato:

xmlns:x=\"urn:schemas-microsoft-com:office:excel\"

alcune righe sopra.
Questa parte, che comprende anche i meta-tag necessari per definire il tipo di contenuto del documento, non va modificata, poiché da essa dipende appunto la struttura del nostro nuovo foglio Excel, mentre potrete personalizzare il resto del programma modificando la sintassi html di creazione della tabella, oppure il metodo di acquisizione dei dati da inserire, prendendoli per esempio da un database.

Il metodo che scrive i dati nel nuovo foglio di stile, writeToFile() contiene il metodo Server.MapPath(FileName) che consente di ottenere il percorso fisico del nuovo file.
Tale metodo prende come parametri il nome del nuovo foglio di Excel (completo di estensione .xls) e un oggetto di tipo ArrayList; anche in questo caso, l'uso dell'oggetto ArrayList è completamente sostituibile tramite l'uso di DataTable o DataSet, con dati prelevati da qualunque sorgente di dati desideriate.
In questo esempio viene inserito dall'utente un unico dato tramite una semplice TextBox; potrete ovviamente adattare questa applicazione alle vostre esigenze inserendo tutti i controlli di input di cui necessitate.

Ecco di seguito il codice della pagina ASP.NET:

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

  private ArrayList list = null;

  public void insert(object sender, EventArgs e)
  {
    list = new ArrayList();
    list.Add(txt.Text);
    this.writeToFile("nuovo.xls", list);
  }

  public void writeToFile(string fileName, ArrayList list)
  {
    StreamWriter writer = null;
    try
    {
      StringBuilder sb = new StringBuilder();
      sb.Append("<html xmlns:o=\"urn:schemas-microsoft-com:office:office\"");
      sb.Append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
      sb.Append("xmlns=\"http://www.w3.org/TR/REC-html40\"><head>");
      sb.Append("<meta http-equiv=Content-Type content=\"text/html; charset=windows-1252\">");
      sb.Append("<meta name=ProgId content=Excel.Sheet>");
      sb.Append("<meta name=Generator content=\"Microsoft Excel 9\">");
      sb.Append("<!--[if gte mso 9]>");
      sb.Append("<xml><x:ExcelWorkbook><x:ExcelWorksheets>");
      sb.Append("<x:ExcelWorksheet><x:Name>mioFoglio</x:Name><x:WorksheetOptions>");
      sb.Append("<x:Selected/><x:ProtectContents>False</x:ProtectContents>");
      sb.Append("<x:ProtectObjects>False</x:ProtectObjects>");
      sb.Append("<x:ProtectScenarios>False</x:ProtectScenarios></x:WorksheetOptions>");
      sb.Append("</x:ExcelWorksheet></x:ExcelWorksheets>");
      sb.Append("<x:ProtectStructure>False</x:ProtectStructure>");
      sb.Append("<x:ProtectWindows>False</x:ProtectWindows></x:ExcelWorkbook></xml>");
      sb.Append("<![endif]--></head><body><table>");

      for(int i=0; i<list.Count; i++)
      {
        sb.Append("<tr>");
          sb.Append("<td>"+list[i].ToString()+"</td>");
        sb.Append("</tr>");
      }
      sb.Append("</table></body></html>");

      writer = new StreamWriter(Server.MapPath(fileName), false);
      writer.AutoFlush = true;
      writer.WriteLine(sb.ToString());
      writer.Flush();
      writer.Close();
      lbl.Text = "File Excel creato con successo !";
    }
    catch(Exception exew)
    {
      lbl.Text = exew.Message;
    }
  }

</script>

<html>
  <head>
    <title>Creare nuovi fogli di lavoro Excel (di Marchi Giuseppe - http://www.peppedotnet.it)</title>
  </head>
  <body>
    <form runat="server">
      <b>Dato da inserire</b><br />
      <asp:TextBox id="txt" runat="server" />
      <br />
      <asp:Button id="btn" Text="Inserisci dato" onClick="insert" runat="server"
/>

      <br />
      <asp:Label id="lbl" runat="server" />
    </form>

  </body>
</html>




Utenti connessi: 5847