Você está offline; aguardando reconexão

Como usar ASP para construir uma planilha XML para exibição do lado cliente

Support for Office 2003 has ended

Microsoft ended support for Office 2003 on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

Sumário
Este artigo ilustra um scritpt ASP (Microsoft Active Server Pages) para construir uma planilha no formato XML Spreadsheet (XMLSS) usando o componente Office Spreadsheet. O XMLSS pode ser exibido do lado cliente de uma dentre diversas formas:
  • No componente Spreadsheet em uma página da Web
  • No Microsoft Excel exibido in-loco no navegador
  • Aberto diretamente no Microsoft Excel
Mais Informações
Usar um componente Spreadsheet no código do lado servidor para construir planilhas fornece mais escalabilidade e melhor desempenho se comparado com usar uma automação do Microsoft Excel do lado servidor. Não recomendamos usar os aplicativos da Automação do Office, incluindo o Excel, no servidor. Este método deve ser evitado quando outras alternativas para obter os mesmos resultados estiverem disponíveis. O XMLSS pode persistir em muitas das ferramentas comuns ao componente Spreadsheet e o Microsoft Excel. Pastas de trabalho com mais de uma planilha, formatação de célula, Filtro Automático, fórmulas em células e recálculo são alguns desses recursos. O componente Spreadsheet tem um modelo de objeto que corresponde de maneira muito próxima ao modelo de objeto para o Microsoft Excel. Entretanto, se você está familiarizado com o modelo de objeto do Excel, você poderá aplicar parte do seu código do Excel já existente, com modificações, para uso no componente Spreadsheet.

O seguinte exemplo demonstra como gerar uma pasta de trabalho com mais de uma planilha no XMLSS usando o componente Spreadsheet com ASP. O exemplo também discute sobre como exibir o XMLSS resultante do lado cliente em uma página da Web ou no Microsoft Excel.

Script ASP para construir XMLSS usando o componente Spreadsheet

Salve o seguinte ASP como XMLSS.asp no diretório raiz virtual do seu servidor Web. Por padrão, o diretório raiz é C:\inetpub\wwwroot.
<% Language=VBScript %><%    Response.Buffer = True    Response.ContentType = "text/xml"    Dim NumOrders, NumProds, r    NumOrders = 300    NumProds = 10            Dim oSS    Dim oOrdersSheet    Dim oTotalsSheet    Dim oRange    Dim c        Set oSS = CreateObject("OWC10.Spreadsheet")    Set c = oSS.Constants    'Rename Sheet1 to "Orders", rename Sheet2 to "Totals" and remove Sheet3    Set oOrdersSheet = oSS.Worksheets(1)    oOrdersSheet.Name = "Orders"    Set oTotalsSheet = oSS.Worksheets(2)    oTotalsSheet.Name = "Totals"    oSS.Worksheets(3).Delete        '=== Build the First Worksheet (Orders) ==============================================            'Add headings to A1:F1 of the Orders worksheet and apply formatting    Set oRange = oOrdersSheet.Range("A1:F1")    oRange.Value = Array("Order Number", "Product ID", "Quantity", "Price", "Discount", "Total")    oRange.Font.Bold = True    oRange.Interior.Color = "Silver"    oRange.Borders(c.xlEdgeBottom).Weight = c.xlThick    oRange.HorizontalAlignment = c.xlHAlignCenter       'Apply formatting to the columns    oOrdersSheet.Range("A:A").ColumnWidth = 20    oOrdersSheet.Range("B:E").ColumnWidth = 15    oOrdersSheet.Range("F:F").ColumnWidth = 20    oOrdersSheet.Range("A2:E" & NumOrders + 1 _        ).HorizontalAlignment = c.xlHAlignCenter    oOrdersSheet.Range("D2:D" & NumOrders + 1).NumberFormat = "0.00"    oOrdersSheet.Range("E2:E" & NumOrders + 1).NumberFormat = "0 % "    oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "$ 0.00" '"_($* #,##0.00_)"            'Obtain the order information for the first five columns in the Orders worksheet    'and populate the worksheet with that data starting at row 2    Dim aOrderData    aOrderData = GetOrderInfo    oOrdersSheet.Range("A2:E" & NumOrders + 1).Value = aOrderData        'Add a formula to calculate the order total for each row and format the column    oOrdersSheet.Range("F2:F" & NumOrders + 1).Formula = "=C2*D2*(1-E2)"        oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "_(  $* #,##0.00   _)"    'Apply a border to the used rows    oOrdersSheet.UsedRange.Borders(c.xlInsideHorizontal).Weight = c.xlThin    oOrdersSheet.UsedRange.BorderAround , c.xlThin, 15        'Turn on AutoFilter and display an initial criteria where    'the Product ID (column 2) is equal to 5    oOrdersSheet.UsedRange.AutoFilter    oOrdersSheet.AutoFilter.Filters(2).Criteria.FilterFunction = c.ssFilterFunctionInclude    oOrdersSheet.AutoFilter.Filters(2).Criteria.Add "5"    oOrdersSheet.AutoFilter.Apply        'Add a Subtotal at the end of the usedrange    oOrdersSheet.Range("F" & NumOrders + 3).Formula = "=SUBTOTAL(9, F2:F" & NumOrders + 1 & ")"        'Apply window settings for the Orders worksheet    oOrdersSheet.Activate   'Makes the Orders sheet active    oSS.Windows(1).ViewableRange = oOrdersSheet.UsedRange.Address    oSS.Windows(1).DisplayRowHeadings = False    oSS.Windows(1).DisplayColumnHeadings = False    oSS.Windows(1).FreezePanes = True    oSS.Windows(1).DisplayGridlines = False        '=== Build the Second Worksheet (Totals) ===========================================        'Change the Column headings and hide row headings    oTotalsSheet.Activate    oSS.Windows(1).ColumnHeadings(1).Caption = "Product ID"    oSS.Windows(1).ColumnHeadings(2).Caption = "Total"    oSS.Windows(1).DisplayRowHeadings = False        'Add the product IDs to column 1    Dim aProductIDs    aProductIDs = GetProductIDs    oTotalsSheet.Range("A1:A" & NumProds).Value = aProductIDs    oTotalsSheet.Range("A1:A" & NumProds).HorizontalAlignment = c.xlHAlignCenter    'Add a formula to column 2 that computes totals per product from the Orders Sheet    oTotalsSheet.Range("B1:B" & NumProds).Formula = _        "=SUMIF(Orders!B$2:B$" & NumOrders + 1 & ",A1,Orders!F$2:F$" & NumOrders + 1 & ")"    oTotalsSheet.Range("B1:B" & NumProds).NumberFormat = "_(  $* #,##0.00   _)"    'Apply window settings for the Totals worksheet    oSS.Windows(1).ViewableRange = oTotalsSheet.UsedRange.Address        '=== Setup for final presentation ==================================================        oSS.DisplayToolbar = False    oSS.AutoFit = True    oOrdersSheet.Activate    Response.Write oSS.XMLData    Response.EndFunction GetOrderInfo()    ReDim aOrderInfo(NumOrders,5)    Dim aPrice, aDisc    aPrice = Array(10.25, 9.5, 2.34, 6.57, 9.87, 4.55, 6, 13.05, 3.3, 5.5)    aDisc = Array(0, 0.1, 0.15, 0.2)    For r = 0 To NumOrders-1        aOrderInfo(r, 0) = "'" & String(7-Len(CStr(r+1)), "0") & r+1 'Col 1 is Order Number        aOrderInfo(r, 1) = Int(Rnd() * NumProds) + 1                 'Col 2 is Product ID        aOrderInfo(r, 2) = Int(Rnd() * 20) + 1                       'Col 3 is Quantity        aOrderInfo(r, 3) = aPrice(aOrderInfo(r, 1)-1)                'Col 4 is Price        aOrderInfo(r, 4) = aDisc(Int(Rnd() * 4))                     'Col 5 is Discount    Next    GetOrderInfo = aOrderInfoEnd FunctionFunction GetProductIDs()    ReDim aPIDs(NumProds, 1)    For r = 0 To NumProds-1        aPIDs(r, 0) = r+1    Next    GetProductIDs = aPIDsEnd Function%>				

Exibir o XMLSS em uma página da Web

Para exibir o XMLSS de exemplo em uma página da Web, é necessário apenas definir a propriedade XMLURL para o componente Spreadsheet como o URL do ASP, da seguinte forma:
<html><body><object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1">  <param name="XMLURL" value="http://YourWebServer/xmlss.asp"></object></body></html>				
Observação Se você está usando o Microsoft Office 2003, talvez seja necessário alterar o classid no código acima onde se aplica.

No HTML precedente, a propriedade XMLURL é definida usando a tag <param>. É possível também definir a propriedade XMLURL em tempo de execução se desejado, usando o seguinte código.
   Spreadsheet1.XMLURL = "http://YourWebServer/xmlss.asp"				

Exibir o XMLSS no Microsoft Excel

O XMLSS que é criado com o componente Spreadsheet pode ser aberto no Microsoft Excel. A formatação e recursos que você implementa no componente Spreadsheet podem ser compartilhados com o Microsoft Excel. O componente Spreadsheet é compatível com alguns recursos que o Excel não suporta. Além disso, o Excel é compatível com alguns recursos que o componente Spreadsheet não suporta. Qualquer tag XML ou atributo que o Excel não implementa são ignorados quando o XMLSS é aberto.

Para ver os resultados do script ASP de exemplo no Microsoft Excel, execute as etapas a seguir:
  1. Inicie o Microsoft Excel.
  2. No menu Arquivo, clique em Abrir.
  3. Na caixa Nome do arquivo, digite http://SeuServidorWeb/xmlss.asp e clique em Abrir.
Examine a pasta de trabalho e observe que os dados e formatos que foram aplicados em tempo de execução estão todos presentes na pasta de trabalho quando ela é aberta no Excel. Existe uma exceção: As legendas dos cabeçalhos que são criados no componente Spreadsheet não são levados para o Excel porque este é um recurso do componente Spreadsheet que o Microsoft Excel não compartilha. Se você cria um XMLSS usando o componente Spreadsheet com o propósito de exibir o arquivo no Excel, esteja atento aos diferentes recursos que cada um suporta.

Outra forma de abrir o XMLSS criado com ASP no Microsoft Excel é fornecendo o tipo Excel Multipurpose Internet Mail Extensions (MIME) como o ContentType no seu ASP. Ao usar o tipo MIME do Excel e navegar para o seu ASP, o XMLSS pode ser renderizado no Microsoft Excel in-loco no navegador. Para fazer isto, execute as seguintes etapas:
  1. Abra o XMLSS.asp em um editor de texto.
  2. Altere a seguinte linha no script:
    Response.ContentType = "text/xml"					
    Altere a linha de código para ficar semelhante ao seguinte:
    Response.ContentType = "application/vnd.ms-excel"					
  3. Salve as alterações no XMLSS.asp e inicie o Windows Internet Explorer.
  4. Vá para http://SeuServidorWeb/XMLSS.asp. A planilha XML é renderizada no Microsoft Excel hospedado in-loco no navegador.
Referências
Para obter mais informações, visite o tópico Office Web Components no seguinte site da Microsoft (em inglês): Para obter mais informações, clique nos números abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:
285891 Como usar o Visual Basic ou ASP para criar uma planilha XML para o Excel 2002 e Excel 2003
278976 Como usar XSL para transformar uma planilha Excel XML para uso do lado servidor
257757 Considerações sobre a Automação do Office no servidor
XL2003 XL2007
Propriedades

ID do Artigo: 288130 - Última Revisão: 03/20/2008 03:38:35 - Revisão: 5.1

Microsoft Office Web Components, Microsoft Office Web Components, Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Active Server Pages 4.0

  • kbhowto kbofficewebspread KB288130
Comentários