Excel 2002 apresenta funcionalidade para abrir ficheiros no formato XML (Extensible Markup Language). Um ficheiro XML correctamente formado possível abrir directamente no Excel 2002 ou no Excel 2003 utilizando a interface de utilizador ou o código.
Com o Microsoft Visual C# .NET ou Microsoft Visual C# 2005, pode tirar partido das funcionalidades XML do Excel para facilmente transferir dados para um livro para apresentar os dados com formatação e disposição da sua escolha. Este artigo demonstra como realizar esta tarefa.
Gerar XML a partir de um DataSet para utilização no Excel 2002 ou no Excel 2003
Esta secção mostra como criar um objecto
DataSet e exportar os dados que contenha para um ficheiro XML utilizando o método
WriteXML . O ficheiro XML gerado pode ser aberto directamente no Excel. Por motivos de ilustração, o objecto de
DataSet é criado da dados de exemplo Adamastor do Microsoft Access utilizando o fornecedor de OLEDB do Jet. No entanto, o código semelhante funciona com qualquer objecto do
DataSet que criar com o Visual C# 2005 ou o Visual C#. NET.
- Inicie o Microsoft Visual Studio 2005 ou Microsoft Visual Studio .NET. No menu ficheiro , clique em Novo e em seguida, clique em projecto . Seleccione os tipos de Visual C# Projects Aplicação do Windows . É criado o Form1 por predefinição.
- No menu Ver , seleccione a caixa de ferramentas para visualizar a caixa de ferramentas dos controlos e adicionar um botão ao Form1.
- Faça duplo clique em Button1 . Aparece a janela código para o formulário.
- Adicione as directivas de utilizar o seguinte na parte superior de Form1.cs:
using System.Data.OleDb;
using System.Xml;
- Adicione a seguinte variável de membro privado à classe Form1:
private string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ " C:\\Program Files\\Microsoft Office\\Office10\\Samples\\"
+ "Northwind.mdb;";
NOTA: poderá ter de modificar o caminho para a base de dados Adamastor.mdb na cadeia de ligação para corresponder a instalação. - Adicione o seguinte código ao processador 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: tem de alterar o código do Visual Studio 2005. Por predefinição, Visual C# adiciona um formulário ao projecto quando cria um projecto de Windows Forms. O formulário é denominado Form1. Os dois ficheiros que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Tem de escrever o código no Form1.cs. O ficheiro Form1.Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as acções efectuadas arrastando e largando controlos da caixa de ferramentas.
Para obter mais informações sobre o Windows Forms Designer no Visual C# 2005, visite o seguinte Microsoft Developer Network) Web site da MSDN: - Prima F5 para compilar e executar o programa.
- Clique em Button1 para criar o ficheiro XML e fechar Form1 para terminar o programa.
- Inicie o Excel 2002 ou o Excel 2003 e abra o ficheiro de saída C:\Customers.xml.
- Depois de ter detectado como o XML tem sido analisado em linhas e colunas no novo livro, feche o ficheiro e saia do Excel.
Formatar XML utilizando uma Stylesheet
Este passo mostra como utilizar uma folha de estilos (XSL) para transformar como dados XML são formatados e organizados num livro do Excel.
- Using any HTML editor or a text editor (such as Notepad.exe), save the following XSL as 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>
- A seguinte linha de código no processador de button1_Click uncomment:
xtw.WriteProcessingInstruction("xml-stylesheet",
"type='text/xsl' href='customers.xsl'");
esta linha de código escreve uma instrução de processamento para o ficheiro XML que o Excel utiliza para localizar a folha de estilos (Customers.xsl).
- Prima F5 para compilar e executar o programa.
- Clique em Button1 para criar o ficheiro XML e fechar Form1 para terminar o programa.
- Inicie o Excel 2002 ou o Excel 2003 e abra o ficheiro de saída C:\Customers.xml.
- Porque o Excel vê a instrução de processamento para a folha de estilos no XML, recebe um pedido de caixa de diálogo quando abrir o ficheiro. Na caixa de diálogo Importar XML , seleccione Abrir o ficheiro com a seguinte folha de estilos aplicada . Na lista, seleccione Customers.xsl e clique em OK . Tenha em atenção que os dados XML estão formatados e que as colunas tem sido dispostas de acordo com a folha de estilos.
- Feche o ficheiro e saia do Excel.
Utilizar o código para abrir o XML transformado
Cópia para este ponto, abriu o ficheiro XML utilizando a interface de utilizador no Excel. Esta secção demonstra como automatizar o Excel para abrir o livro programaticamente. O exemplo que se segue ilustra a abrir o XML transformado sem intervenção do utilizador, primeiro transformar o XML no objecto
DataSet para HTML.
- Adicione uma referência para o Microsoft Excel 10.0 Object Library ou Microsoft Excel 11.0 Object Library . Para o fazer, siga estes passos:
- No menu projecto , clique em Add Reference .
- No separador COM , localize Microsoft Excel 10.0 Object Library ou Microsoft Excel 11.0 Object Library e clique em Seleccionar .
- Clique em OK na caixa de diálogo Adicionar referências para aceitar a selecção. Se receber um pedido para gerar mensagens publicitárias para a biblioteca que seleccionou, clique em Sim .
- Adicione as directivas de utilizar o seguinte na parte superior de Form1.cs:
using Excel = Microsoft.Office.Interop.Excel;
- No projecto Visual C# 2005 ou do Visual C#. NET, adicione outro botão ao Form1.
- Faça duplo clique em Button2 . Quando a janela de código para o formulário aparece, adicione o seguinte código ao Button2_Click processador:
//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);
- Prima F5 para compilar e executar o programa.
- Clique em Button2 para abrir o XML transformado no Excel.
Nota Enquanto o Excel 2002 e Excel 2003 Object Model expõe um método de
OpenXML permite-lhe programaticamente abrir um ficheiro XML com folhas de estilos aplicadas, o exemplo anterior não chama este método devido a um problema conhecido com a utilização deste método a partir de um cliente de automatização. O método
OpenXML funciona como previsto quando chamado a partir de uma macro do Excel; no entanto, quando este método é chamado a partir de um cliente de automatização, o parâmetro de
folhas de estilo é ignorado. Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
307230
(http://support.microsoft.com/kb/307230/EN-US/
)
Erro: Parâmetro StyleSheets do método OpenXML ignoradas ao automatizar o Excel 2002
Para mais informações, consulte os seguintes artigos da base de dados de conhecimento da:
288215
(http://support.microsoft.com/kb/288215/EN-US/
)
INFO: Microsoft Excel 2002 e XML
302084
(http://support.microsoft.com/kb/302084/EN-US/
)
Como automatizar o Microsoft Excel a partir do Visual C# .NET
301216
(http://support.microsoft.com/kb/301216/EN-US/
)
Como preencher um objecto de DataSet a partir de uma base de dados utilizando o Visual Basic .NET
306023
(http://support.microsoft.com/kb/306023/EN-US/
)
Como transferir dados para um livro do Excel utilizando o Visual C# .NET