Trasferimento di dati XML a Microsoft Excel 2002 utilizzando Visual C# .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 307029 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato precedentemente pubblicato con il codice di riferimento I307029
Per la versione di questo articolo relativa a Microsoft Visual Basic .NET, vedere 307021.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In Excel 2002 viene introdotta una funzionalità per l'apertura di file nel formato XML (Extensible Markup Language). Un file XML in formato corretto può essere aperto direttamente in Excel 2002 o Excel 2003 tramite l'interfaccia utente o il codice.

Con Microsoft Visual C# 2005 o Microsoft Visual C# .NET è possibile sfruttare la funzionalità XML di Excel per trasferire dati direttamente a una cartella di lavoro e presentarli con la formattazione e la disposizione desiderate. In questo articolo viene descritto come eseguire questa operazione.

Generazione di XML da un DataSet per l'utilizzo in Excel 2002 o Excel 2003

In questa sezione viene illustrato come creare un oggetto DataSet ed esportare i dati contenuti in un file XML utilizzando il metodo WriteXML. Il file XML generato può essere aperto direttamente in Excel. A scopo illustrativo, l'oggetto DataSet viene creato dal database di esempio Northwind di Microsoft Access utilizzando il provider OLE DB per Jet. Un codice simile funzionerà tuttavia con qualsiasi oggetto DataSet creato con Visual C# 2005 o Visual C# .NET.
  1. Avviare Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET. Scegliere Nuovo dal menu File, quindi Progetto. Selezionare Applicazione Windows dai tipi di progetto di Visual C#. Per impostazione predefinita, viene creato il progetto Form1.
  2. Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la casella degli strumenti, quindi aggiungere un pulsante a Form1.
  3. Fare doppio clic su Button1. Verrà visualizzata la finestra del codice del form.
  4. Aggiungere le seguenti direttive using all'inizio di Form1.cs:
    using System.Data.OleDb;
    using System.Xml;
    					
  5. Aggiungere la seguente variabile membro privata alla classe Form1:
    private string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    	+ " C:\\Program Files\\Microsoft Office\\Office10\\Samples\\"
    	+ "Northwind.mdb;";
    					
    Nota Potrebbe essere necessario modificare il percorso di Northwind.mdb nella stringa di connessione in modo che corrisponda all'installazione in uso.
  6. Aggiungere il codice seguente al gestore button1_Click:
    //Connect to the data source.
             OleDbConnection objConn = new OleDbConnection (strConn);
             try
             {
                objConn.Open();			
    
                //Fill a dataset with records from the Customers table.
                OleDbCommand objCmd = new OleDbCommand(
                   "Select CustomerID, CompanyName, ContactName, " 
                   + "Country, Phone from Customers", objConn);
                OleDbDataAdapter objAdapter = new OleDbDataAdapter();
                objAdapter.SelectCommand = objCmd;
                DataSet objDataset = new DataSet();
                objAdapter.Fill(objDataset);
    
    
                //Create the FileStream to write with.
                System.IO.FileStream fs = new System.IO.FileStream(
                   "C:\\Customers.xml", System.IO.FileMode.Create);
    
                //Create an XmlTextWriter for the FileStream.
                System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(
                   fs, System.Text.Encoding.Unicode);
    
                //Add processing instructions to the beginning of the XML file, one 
                //of which indicates a style sheet.
                xtw.WriteProcessingInstruction("xml", "version='1.0'");
                //xtw.WriteProcessingInstruction("xml-stylesheet", 
                  // "type='text/xsl' href='customers.xsl'");
    
                //Write the XML from the dataset to the file.
                objDataset.WriteXml(xtw);
                xtw.Close();
    
                //Close the database connection.
                objConn.Close();
             }
             catch (System.Exception ex)
             {
                MessageBox.Show(ex.Message);
             } 
    					
    Nota È necessario modificare il codice in Visual Studio 2005. Per impostazione predefinita, Visual C# aggiunge un form al progetto quando si crea un progetto Windows Form. Il nome del form è Form1. I due file che rappresentano il form sono denominati Form1.cs e Form1.designer.cs. Il codice viene scritto in Form1.cs. Nel file Form1.designer.cs Progettazione Windows Form scrive il codice che implementa tutte le azioni eseguite trascinando e rilasciando i controlli dalla Casella degli strumenti.

    Per ulteriori informazioni su Progettazione Windows Form in Visual C# 2005, visitare il seguente sito Web Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/it-it/library/ms173077.aspx
  7. Premere F5 per compilare ed eseguire il programma.
  8. Fare clic su Button1 per creare il file XML, quindi chiudere Form1 per terminare il programma.
  9. Avviare Excel 2002 o Excel 2003 e aprire il file di output C:\Customers.xml.
  10. Dopo avere osservato come vengono analizzati i dati XML nelle righe e nelle colonne della nuova cartella di lavoro, chiudere il file e uscire da Excel.

Formattazione di XML utilizzando un foglio di stile

In questo passaggio viene illustrato come utilizzare un foglio di stile (XSL) per trasformare la modalità di formattazione e disposizione dei dati XML in una cartella di lavoro di Excel.
  1. Utilizzando un editor HTML o di testo, ad esempio Notepad.exe, salvare il seguente codice XSL come C:\Customers.xsl:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
        <HTML>
          <HEAD>
            <STYLE>   
              .HDR { background-color:bisque;font-weight:bold }
            </STYLE>
          </HEAD>
          <BODY>
            <TABLE>
              <COLGROUP WIDTH="100" ALIGN="CENTER"></COLGROUP>
              <COLGROUP WIDTH="200" ALIGN="LEFT"></COLGROUP>
              <COLGROUP WIDTH="200" ALIGN="LEFT"></COLGROUP>
              <COLGROUP WIDTH="100" ALIGN="LEFT"></COLGROUP>
              <COLGROUP WIDTH="100" ALIGN="LEFT"></COLGROUP>
              <TD CLASS="HDR">Customer ID</TD>
              <TD CLASS="HDR">Company</TD>
              <TD CLASS="HDR">Contact</TD>
              <TD CLASS="HDR">Country</TD>
              <TD CLASS="HDR">Phone</TD>
              <xsl:for-each select="NewDataSet/Table">
                <TR>
                  <TD><xsl:value-of select="CustomerID"/></TD>
                  <TD><xsl:value-of select="CompanyName"/></TD>
                  <TD><xsl:value-of select="ContactName"/></TD>
                  <TD><xsl:value-of select="Country"/></TD>
                  <TD><xsl:value-of select="Phone"/></TD>
                </TR>
              </xsl:for-each>
            </TABLE>
          </BODY>
        </HTML>
      </xsl:template>
    </xsl:stylesheet> 
    					
  2. Rimuovere il commento dalla seguente riga di codice nel gestore button1_Click:
    xtw.WriteProcessingInstruction("xml-stylesheet", 
    	"type='text/xsl' href='customers.xsl'");
    					
    Con questa riga di codice viene scritta nel file XML un'istruzione di elaborazione che sarà utilizzata da Excel per individuare il foglio di stile (Customers.xsl).

  3. Premere F5 per compilare ed eseguire il programma.
  4. Fare clic su Button1 per creare il file XML, quindi chiudere Form1 per terminare il programma.
  5. Avviare Excel 2002 o Excel 2003 e aprire il file di output C:\Customers.xml.
  6. Poiché l'istruzione di elaborazione per il foglio di stile contenuta nel codice XML viene rilevata da Excel, all'apertura del file verrà visualizzata una finestra di dialogo. Nella finestra di dialogo Importa XML selezionare Apri il file e applica il seguente foglio di stile. Nell'elenco selezionare Customers.xsl, quindi scegliere OK. I dati XML vengono formattati e le colonne disposte secondo il foglio di stile.
  7. Chiudere il file e uscire da Excel.

Utilizzo di codice per aprire l'XML trasformato

Fino a questo punto il file XML è stato aperto tramite l'interfaccia utente di Excel. In questa sezione viene descritto come automatizzare Excel per l'apertura della cartella di lavoro a livello di programmazione. Nel seguente esempio viene illustrato come aprire l'XML trasformato senza intervento dell'utente, trasformando prima l'XML nell'oggetto DataSet in HTML.
  1. Aggiungere un riferimento a Libreria di oggetti Microsoft Excel 10.0 o Libreria di oggetti Microsoft Excel 11.0: Per effettuare questa operazione, attenersi alla seguente procedura:
    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare Libreria di oggetti Microsoft Excel 10.0 o Libreria di oggetti Microsoft Excel 11.0, quindi fare clic su Seleziona.
    3. Scegliere OK nella finestra di dialogo Aggiungi riferimento per accettare la selezione effettuata. Se viene richiesto di generare wrapper per la libreria selezionata, scegliere .
  2. Aggiungere le seguenti direttive using all'inizio di Form1.cs:
    using Excel = Microsoft.Office.Interop.Excel;
    					
  3. Nel progetto di Visual C# 2005 o Visual C# .NET aggiungere un altro pulsante a Form1.
  4. Fare doppio clic su Button2. Quando viene visualizzata la finestra di codice del form aggiungere il seguente codice al gestore Button2_Click:
    //Connect to the data source.
    OleDbConnection objConn = new OleDbConnection (strConn);
    objConn.Open();			
    
    //Fill a dataset with records from the Customers table.
    OleDbCommand objCmd = new OleDbCommand(
    	"Select CustomerID, CompanyName, ContactName, " 
    	+ "Country, Phone from Customers", objConn);
    OleDbDataAdapter objAdapter = new OleDbDataAdapter();
    objAdapter.SelectCommand = objCmd;
    DataSet objDataset = new DataSet();
    objAdapter.Fill(objDataset);
    
    //Create the FileStream to write with.
    System.IO.FileStream fs = new System.IO.FileStream(
    	"C:\\Customers.htm", System.IO.FileMode.Create);
    
    //Create an XmlTextWriter for the FileStream.
    System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(
    	fs, System.Text.Encoding.Unicode);
    
    //Transform the XML using the stylesheet.
    XmlDataDocument xmlDoc = new XmlDataDocument(objDataset);
    System.Xml.Xsl.XslTransform xslTran = new System.Xml.Xsl.XslTransform();
    xslTran.Load("C:\\Customers.xsl");
    xslTran.Transform(xmlDoc, null, xtw);
    
    //Open the HTML file in Excel.
    Excel.Application oExcel = new Excel.Application();
    oExcel.Visible=true;
    oExcel.UserControl=true;
    Excel.Workbooks oBooks = oExcel.Workbooks;
    object oOpt = System.Reflection.Missing.Value; //for optional arguments
    oBooks.Open("c:\\customers.htm", oOpt, oOpt, oOpt, 
    	oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, 
    	oOpt, oOpt, oOpt);
    
    					
  5. Premere F5 per compilare ed eseguire il programma.
  6. Fare clic su Button2 per aprire l'XML trasformato in Excel.
Nota Mentre nel modello a oggetti di Excel 2002 ed Excel 20032 viene esposto un metodo OpenXML che consente di aprire a livello di programmazione un file XML con applicato un foglio di stile, nell'esempio precedente non viene chiamato questo metodo a causa di un problema noto che si verifica se si utilizza questo metodo da un client di automazione. Il metodo OpenXML funziona correttamente quando viene chiamato da una macro di Excel, tuttavia quando viene chiamato da un client di automazione il parametro StyleSheet viene ignorato. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
307230 BUG: Il parametro StyleSheets del metodo OpenXML viene ignorato nell'automazione di Excel 2002

Riferimenti

Per ulteriori informazioni, vedere i seguenti articoli della Microsoft Knowledge Base:
288215 INFO: Microsoft Excel 2002 e XML
302084 Automazione di Microsoft Excel da Microsoft Visual C# .NET
301216 Come popolare un oggetto DataSet da un database utilizzando Visual Basic .NET
306023 Trasferimento di dati a una cartella di lavoro di Excel tramite Visual C# 2005 o Visual C# .NET

Proprietà

Identificativo articolo: 307029 - Ultima modifica: martedì 23 gennaio 2007 - Revisione: 7.3
Le informazioni in questo articolo si applicano a
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Excel 2003
Chiavi: 
kbhowtomaster KB307029
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com