Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo passo a passo descreve como transformar um DataSet a planilha XML que pode ser renderizado no Excel. O XML de planilha do Excel formato oferece suporte a marcas de elemento e os atributos para Excel funcionalidades, como pastas de trabalho multi-sheet, fórmulas e formatação de célula.
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
Este exemplo passo a passo ilustra componentes de cliente e como servidor trabalham em conjunto para entregar e exibir XML de planilha do Excel.
default.htm é um conjunto de quadros que tem dois quadros. O quadro de cabeçalho contém uma lista de identificações de ordem e o quadro principal exibe informações de ordem depois que um código do pedido é selecionado na lista.
Header.htm contém as marcas de elemento HTML e script para o quadro de cabeçalho.
getdata.vb é um manipulador HTTP que serve a dois propósitos. O manipulador adiciona a lista de ordem de identificações para o quadro de cabeçalho e processa solicitações de informações de ordem que são exibidas no quadro principal. Quando o manipulador HTTP recebe uma solicitação de informações da ordem, ele cria um DataSet para a ordem e retorna uma representação XML do que DataSet para o chamador.
Transform.XSLT é um arquivo XSLT que é usado para transformar o DataSet XML para XML de planilha do Excel.
O código de exemplo usa dados de pedidos no Microsoft SQL Server banco de dados de exemplo Northwind. O exemplo supõe que você irá criar e testar o aplicativo da Web no computador local (http://localhost). Se você não usar um servidor Web no seu computador local, substitua localhost em URLs do exemplo de nome do seu servidor Web.
Gere o DataSet
Nesta seção, você cria o manipulador HTTP e os componentes do lado do cliente que são necessários para recuperar informações do pedido. O DataSet é retornado para o quadro principal como XML simples; o DataSet não é transformado.
Crie um projeto da Web vazio chamado ExcelTransform. Para fazer isso, execute as seguintes etapas:
No menu arquivo no Visual Studio. NET, clique em novo e, em seguida, clique em Project .
Clique em Projetos do Visual Basic e, em seguida, clique no modelo Projeto de Web vazia .
Nome http://localhost/ExcelTransform projeto e, em seguida, clique em OK .
Adicione referências para o projeto. Para fazer isso, execute as seguintes etapas:
No menu Project , clique em Add Reference .
Na lista de componentes na guia .NET , clique em System.Data.dll e, em seguida, clique em Selecionar .
Repita a etapa anterior para System.dll , System.Web.dll e System.XML.dll .
Clique em OK .
No menu Project , clique em Add Class , nome da classe Getdata.vb e em seguida, clique em OK .
Substitua o código no getdata.vb com o seguinte.
Observação <username>Você deve alterar senha e identificação do usuário <nomedousuário> = < senha de alta segurança > para os valores corretos antes de executar esse código. Certifique-se que a ID de usuário tenha as permissões apropriadas para executar esta operação no banco de dados.
Imports System.Web
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Data
Imports System.Data.SqlClient
Public Class GetData
Implements IHttpHandler
Private sConn As String = _
"User ID=<username>;Password=<strong password>;Initial Catalog=Northwind;Data Source=YourSQLServer;"
Public ReadOnly Property IsReusable() As Boolean _
Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
Public Sub ProcessRequest(ByVal context As HttpContext) _
Implements IHttpHandler.ProcessRequest
Dim conn As SqlConnection
Dim sOrderRequested As String
sOrderRequested = context.Request.Item("OrderID")
If Not (sOrderRequested > "") Then
'=== If no order is requested, assume that this is a request
'=== to fill the drop-down list in the Header.htm template
'=== with the list of OrderIDs.
'Get a DataSet for a list of OrderIDs.
Dim sSQL As String = "Select OrderID from Orders"
conn = New SqlConnection(sConn)
conn.Open()
Dim cmd As New SqlCommand(sSQL, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
'Open the header template for the frameset and fill
'in the <option> child nodes for the drop-down lists.
Dim sHTML As String, sOrderID As String
Dim xmlDoc As New XmlDocument()
xmlDoc.Load(context.Server.MapPath("header.htm"))
Dim oElem As XmlElement = _
xmlDoc.DocumentElement.GetElementsByTagName("select").Item(0)
Dim oChild As XmlElement
Do While rdr.Read
sOrderID = rdr.GetInt32(0).ToString
oChild = xmlDoc.CreateElement("option")
oChild.SetAttribute("value", sOrderID)
oChild.InnerText = sOrderID
oElem.AppendChild(oChild)
Loop
rdr.Close()
conn.Close()
'Return the modified header template.
context.Response.Write(xmlDoc.InnerXml)
Else
'=== If an order is requested, create a DataSet for that
'=== order and return the results to the client browser.
'Build a DataSet for the order.
conn = New SqlConnection(sConn)
conn.Open()
Dim ds As DataSet = New DataSet("Order")
Dim CustDa As SqlDataAdapter = New SqlDataAdapter( _
"SELECT OrderID, CompanyName, Address, City, Region, PostalCode, Country, Freight " & _
"FROM Customers " & _
"INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID " & _
"WHERE (((Orders.OrderID)=" & sOrderRequested & "))", conn)
CustDa.Fill(ds, "Customer")
Dim ItemsDa As SqlDataAdapter = New SqlDataAdapter( _
"SELECT Products.ProductName, [Order Details].Quantity, " & _
" [Order Details].[UnitPrice]*[Quantity]*(1-[Discount]) AS ItemTotal " & _
"FROM Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID " & _
"WHERE (([Order Details].[OrderID]) = " & sOrderRequested & ")", conn)
ItemsDa.Fill(ds, "Items")
conn.Close()
SendResults(context, ds)
context.Response.End()
End If
End Sub
Private Sub SendResults(ByVal context As HttpContext, ByVal ds As DataSet)
'Write the XML for the DataSet.
context.Response.ContentType = "text/xml"
context.Response.Output.Write(ds.GetXml)
context.Response.End()
End Sub
End Class
Observação : em Getdata.vb , modificar a atribuição para sConn como uma seqüência de conexão válida para um computador que está executando o SQL Server e que contém o banco de dados de exemplo Northwind.
No menu Project , clique em Add New Item , clique no modelo de Web Configuration File e, em seguida, clique em OK .
No menu Project , clique em Adicionar página HTML , a página Header.htm, nome e, em seguida, clique em OK .
No menu Exibir , clique em Código fonte HTML .
Substitua o código no Header.htm com o seguinte:
<html>
<script language="javascript">
<!--
function OrderSelect_onchange() {
window.parent.frames("main").location.replace("about:blank");
if(OrderSelect.selectedIndex>0) {
window.setTimeout("OpenOrder()", 50);
}
}
function OpenOrder() {
var order = OrderSelect.options(OrderSelect.selectedIndex).value;
window.parent.frames("main").location.href=
"http://localhost/exceltransform/getdata.aspx?orderid=" + order;
}
//-->
</script>
<body>
<select id="OrderSelect" onchange="return OrderSelect_onchange()">
<option value="0">Select an Order</option>
</select>
</body>
</html>
Observação : manipulador HTTP O carrega Header.htm como um documento XML. Para carregar sem erros, Header.htm deve ser bem formado XML. Se você modificar Header.htm, verifique se está bem formado; todos os elementos devem ter adequadas marcas de início e de fim e todas as atribuições de atributo devem ser colocadas entre aspas.
No menu Project , clique em Adicionar página HTML , clique no modelo de conjunto de quadros , nomeie o arquivo default.htm e em seguida, clique em OK . Quando solicitado, clique no tipo de conjunto de quadros de cabeçalho e, em seguida, clique em OK .
No menu Exibir , clique em Código fonte HTML .
Em Frameset.htm, definir os atributos src e de rolagem para o quadro de cabeçalho da seguinte maneira:
No Solution Explorer, clique com o botão direito do mouse em default.htm e clique em Set As Start Page .
Siga estas etapas para testar o exemplo:
No menu Debug , clique em Start without debugging . O conjunto de quadros é aberta no navegador com uma lista drop-down no quadro de cabeçalho que contém uma lista de identificações de ordem.
Selecione qualquer código do pedido na lista drop-down.
Examine o XML que aparece no quadro principal. O XML é uma representação do DataSet criado do manipulador Getdata HTTP de acordo com sua solicitação.
Selecione ordem adicional identificações na lista drop-down para examinar os resultados.
Quando você tiver terminado de testar o aplicativo da Web, feche o Microsoft Internet Explorer.
Transformar o DataSet para o Excel XML
Nesta seção, você pode adicionar código adicional para transformar o DataSet para exibição no Excel.
Abra o projeto ExcelTransform Web que você acabou de criar.
No menu Project , clique em Add New Item , clique em modelo de Arquivo XSLT , nome projeto Transform.xslt e em seguida, clique em OK .
Replace the contents of Transform.xslt with the following:
No Getdata.vb , substitua a função SendResults com o seguinte:
Private Sub SendResults(ByVal context As HttpContext, ByVal ds As DataSet)
Dim sOrderID As String = ds.Tables(0).Rows(0).Item(0)
'Set up the response for Excel.
context.Response.ContentType = "application/vnd.ms-excel"
context.Response.Charset = ""
'Transform the DataSet XML using transform.xslt
'and return the results to the client in Response.Outputstream.
Dim tw As XmlTextWriter
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(ds)
Dim xslTran As XslTransform = New XslTransform()
xslTran.Load(context.Server.MapPath("transform.xslt"))
xslTran.Transform(xmlDoc, Nothing, context.Response.OutputStream)
context.Response.End()
End Sub
Siga estas etapas para testar o exemplo:
No menu Debug , clique em Start without debugging . O conjunto de quadros é aberta no navegador com uma lista drop-down no quadro de cabeçalho que contém uma lista de identificações de ordem.
Selecione qualquer código do pedido na lista drop-down. Observe que o DataSet que você solicitou foi criado e é transformado em planilha XML e exibida no Excel. Os dados no Excel contém formatação e cálculos.
Quando você tiver terminado de testar o aplicativo da Web, feche o Internet Explorer.
Salvar o XML transformado em um arquivo (opcional)
Na seção anterior, o manipulador HTTP transmite o XML transformado para o cliente. Você talvez queira salvar o XML de DataSet e os resultados da transformação em um arquivo. Isso pode ser uma etapa de solução de problemas útil se você achar que a transformação não lhe os resultados que você espera. Você pode usar essa abordagem para examinar o XML de DataSet e o XML transformado para possíveis erros.
Observação : O exemplo salva os arquivos XML na pasta de aplicativo da Web. Talvez você precise alterar permissões para a pasta, como demonstrado nas etapas a seguir.
Defina permissões de gravação na pasta para o ASP.NET processo:
Inicie o Windows Explorer.
Localize a pasta de aplicativo da Web. O caminho padrão é C:\Inetpub\Wwwroot\ExcelTransform.
Clique com o botão direito na pasta ExcelTransform e, em seguida, clique em Propriedades .
Na guia segurança , clique em Adicionar .
Em Digite os nomes de objeto para selecionar , digite o objeto nome \aspnet YourComputerName e, em seguida, clique em OK .
Na guia segurança , clique para selecionar a gravação para permitir que as permissões de gravação para a conta de \aspnet YourComputerName e, em seguida, clique em OK .
No Getdata.vb , substitua a função SendResults com o seguinte:
Private Sub SendResults(ByVal context As HttpContext, ByVal ds As DataSet)
Dim sOrderID As String = ds.Tables(0).Rows(0).Item(0)
'First, save the XML representation of the DataSet in a file
'and add a processing instruction to the XML so that it can be
'transformed client-side.
Dim tw As XmlTextWriter
tw = New XmlTextWriter(context.Server.MapPath("order" & sOrderID & ".xml"), System.Text.Encoding.UTF8)
tw.Formatting = Formatting.Indented
tw.Indentation = 3
tw.WriteStartDocument()
tw.WriteProcessingInstruction("xml-stylesheet", _
"type='text/xsl' href='http://localhost/ExcelTransform/transform.xslt'")
ds.WriteXml(tw)
tw.Close()
'Second, transform the DataSet XML and save it to a file.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(ds)
Dim xslTran As XslTransform = New XslTransform()
xslTran.Load(context.Server.MapPath("transform.xslt"))
tw = New XmlTextWriter(context.Server.MapPath("order" & sOrderID & ".xls"), System.Text.Encoding.UTF8)
tw.Formatting = Formatting.Indented
tw.Indentation = 3
tw.WriteStartDocument()
xslTran.Transform(xmlDoc, Nothing, tw)
tw.Close()
'Optionally, redirect to the saved transformation.
context.Response.Redirect( _
"http://localhost/ExcelTransform/order" & sOrderID & ".xls")
context.Response.End()
End Sub
Siga estas etapas para testar o exemplo:
No menu Debug , clique em Start Without Debugging .
Selecione uma ordem na lista drop-down. O XML transformado aparece no quadro principal no Excel.
Examinar o XML bruto do DataSet, C:\Inetpub\Wwwroot\ExcelTransform\order NNNNN .XML. Você pode abrir o XML em qualquer editor de texto ou no Excel. Se você abrir Order.xml no Excel, você será solicitado a aplicar a folha de estilos.
Examine a planilha XML, C:\Inetpub\Wwwroot\ExcelTransform\order NNNNN .xls. Você pode abrir o XML em qualquer editor de texto ou no Excel.
Quando você cria seu próprio arquivo XSLT para o Excel, primeiro crie um modelo de pasta de trabalho no Excel que contém a formatação e fórmulas que você precisa e salvar a pasta de trabalho na planilha XML. Em seguida, você pode modificar o XML para que contenha o XSL expressões e os elementos que você precisa transformar seu DataSet XML corretamente. Quando você modifica o XML que você salvou do Excel, observe o seguinte:
As células em uma planilha são representadas por um <table> elemento no XML. O <table> tem dois atributos, ss:ExpandedColumnCount e ss:ExpandedRowCount , que designar quais células são usados na planilha (ou seja, "intervalo usado"). Se a planilha tiver um número variável de linhas ou colunas (ou ambos), definir esses atributos durante a transformação. Observe que o atributo ss:ExpandedRowCount no transform.xslt é definido com base em uma contagem de certos nós no DataSet XML.
As fórmulas nas células são representadas em notação RC e não em notação A1.
Cada combinação de formatação diferente que você aplicar a células em uma planilha tem seu próprio estilo. Estilos são armazenados no <style> elemento do XML Spreadsheet.
Observação Os desenvolvedores que usam o .NET Framework 1.1 devem estar cientes das alterações que foram feitas para a classe XslTransform entre o .NET Framework 1.0 e .NET Framework 1.1. Por exemplo, vários das versões sobrecarregadas dos métodos a transformação e carga (incluindo a versão que é usada neste artigo) são considerados obsoletos começando com o .NET Framework 1.1. Para obter informações adicionais sobre o método XslTransform.Transform , visite o seguinte site da Web Microsoft Developer Network (MSDN):
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
288215
(http://support.microsoft.com/kb/288215/
)
Microsoft Excel 2002 e XML
307021
(http://support.microsoft.com/kb/307021/
)
Como transferir dados XML para o Microsoft Excel 2002 usando o Visual Basic .NET
306022
(http://support.microsoft.com/kb/306022/
)
Como transferir dados para uma pasta de trabalho do Excel usando o Visual Basic .NET
307985
(http://support.microsoft.com/kb/307985/
)
Visão geral sobre manipuladores HTTP e módulos HTTP ASP.NET
308000
(http://support.microsoft.com/kb/308000/
)
Como criar um módulo HTTP do ASP.NET usando Visual Basic .NET
311461
(http://support.microsoft.com/kb/311461/
)
Como usar o ASP.NET ou Visual Basic .NET para transformar o XML para Rich Text Format (RTF) para o Microsoft Word 2002
285891
(http://support.microsoft.com/kb/285891/
)
Como usar o Visual Basic ou ASP para criar uma planilha XML para o Excel 2002
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 319180
(http://support.microsoft.com/kb/319180/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.