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.
- 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.
- Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la casella degli strumenti, quindi aggiungere un
pulsante a Form1.
- Fare doppio clic su Button1. Verrà visualizzata la finestra del codice del form.
- Aggiungere le seguenti direttive using all'inizio di Form1.cs:
using System.Data.OleDb;
using System.Xml;
- 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. - 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): - Premere F5 per compilare ed eseguire il
programma.
- Fare clic su Button1 per creare il file XML, quindi chiudere Form1 per terminare il
programma.
- Avviare Excel 2002 o Excel 2003 e aprire il file di output
C:\Customers.xml.
- 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.
- 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>
- 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).
- Premere F5 per compilare ed eseguire il
programma.
- Fare clic su Button1 per creare il file XML, quindi chiudere Form1 per terminare il
programma.
- Avviare Excel 2002 o Excel 2003 e aprire il file di output
C:\Customers.xml.
- 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.
- 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.
- 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:
- Scegliere Aggiungi riferimento dal menu Progetto.
- Nella scheda COM individuare Libreria di oggetti Microsoft Excel 10.0 o Libreria di oggetti Microsoft Excel 11.0, quindi fare clic su Seleziona.
- Scegliere OK nella finestra di dialogo Aggiungi riferimento per accettare la selezione effettuata. Se viene richiesto di
generare wrapper per la libreria selezionata, scegliere Sì.
- Aggiungere le seguenti direttive using all'inizio di Form1.cs:
using Excel = Microsoft.Office.Interop.Excel;
- Nel progetto di Visual C# 2005 o Visual C# .NET aggiungere
un altro pulsante a Form1.
- 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);
- Premere F5 per compilare ed eseguire il
programma.
- 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
(http://support.microsoft.com/kb/307230/
)
BUG: Il parametro StyleSheets del metodo OpenXML viene ignorato nell'automazione di Excel 2002
Per ulteriori informazioni, vedere i seguenti articoli
della Microsoft Knowledge Base:
288215
(http://support.microsoft.com/kb/288215/
)
INFO: Microsoft Excel 2002 e XML
302084
(http://support.microsoft.com/kb/302084/
)
Automazione di Microsoft Excel da Microsoft Visual C# .NET
301216
(http://support.microsoft.com/kb/301216/
)
Come popolare un oggetto DataSet da un database utilizzando Visual Basic .NET
306023
(http://support.microsoft.com/kb/306023/
)
Trasferimento di dati a una cartella di lavoro di Excel tramite Visual C# 2005 o Visual C# .NET
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
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.