Sou professor na Universidade de Passo Fundo e, para evitar a “cola”, elaboro diversas provas, cada uma com as questões em uma ordem diferente.
Já a algum tempo eu queria automatizar o processo de geração das provas e como estava curioso sobre a integração entre WORD e XML desenvolvi esta pequena aplicação, simples mas muito didática.
A aplicação usa o componente XMLHTTP para integrar os dados, o XML como banco de dados, o XSLT para formatar os dados, ASP no processamento da base de dados e VBA como linguagem de macro que insere os dados no documento WORD.
Na verdade nem era necessário o uso de toda esta parafernália, mas resolvi juntar todas as tecnologias que estou estudando numa única aplicação.
 
Arquivos:
provas.xml – bd com as questões.
provas.xsl – arquivo com a formatação dos dados. Na verdade serve apenas para ordenar as questões usando o ID como chave.
xmlhttp.asp – script que responde às solicitações da macro do Word
provas.dot – arquivo de modelo do WORD com uma macro embutida que é acionada na criação de um novo documento.
 
Estude os fontes abaixo e bom trabalho.
Para baixar os arquivos acesse -> http://www.gdez.com.br/barbiero/provas.zip
 
provas.xml
Arquivo contendo as questões que serão reordenadas e inseridas no documento Word.
 
<?xml:stylesheet type="text/xsl"  ?>
<provas>
   <prova id="">
      <questao id="1">Diferencie as cebolas dos abacates.</questao>
      <questao id="2">defina o sabor do xuxu.</questao>
      <questao id="3">Diferencie redes para lambari de redes para tilápia</questao>
      <questao id="4">Para que serve o comando sbórnia?</questao>
      <questao id="5">Para que serve o comando tchê?</questao>
      <questao id="6">Para que serve o serviço de quarto?</questao>
      <questao id="7">O que é um calo?</questao>
      <questao id="8">Defina graxaim?</questao>
      <questao id="9">Descreva as características de Passo Fundo</questao>
      <questao id="10">Em quais camadas ficam os protocolos tartaruga e jacaré?</questao>
   </prova>
</provas>
 
provas.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
 
<xsl:template match="/provas">
<provas>
            <prova>
                        <xsl:apply-templates select="/provas/prova"/>
            </prova>
</provas>
</xsl:template>   
 
<xsl:template match="/provas/prova">
   <xsl:for-each select="questao" >
     <xsl:sort select="@id"/>
             <questao>        
     <xsl:value-of select="."/>
     </questao>
   </xsl:for-each>
</xsl:template>   
 
</xsl:stylesheet>
 
 
xmlhttp.asp – este arquivo deve ser colocado em uma pasta com permissão de execução de scripts no IIS.
<%@ Language=VBScript %>
<%
            Response.CharSet="iso-8859-1"   'Define o conjunto de caracteres do português
 
            set docXML = Server.CreateObject("Microsoft.XMLDOM")
    docXML.async=false
    docXML.load(server.MapPath("provas.xml")) 
    
            set docXSL = Server.CreateObject("Microsoft.XMLDOM")
    docXSL.async=false
    docXSL.load(server.MapPath("provas.xsl")) 
 
    set nodelistQuestoes = docXML.documentElement.Childnodes(0).childnodes
    '
    '       Gera números aleatórios para alterar a ordem das questões
    '
    randomize            'inicializa o gerador de números aleatórios
    for i = 0 to nodelistQuestoes.length - 1
                nodelistQuestoes(i).setAttribute "id", int(rnd * 1000)
            next      
            '
            '            Aplica a formatação com o XSLT
            '
            set docTransformadoXML = Server.CreateObject("Microsoft.XMLDOM")
            docTransformadoXML.async = false
            docTransformadoXML.loadxml(docXML.transformNode(docXSL)) 
            '
            '            Envia as informações no formato exigido pelo Word, uma questão em cada linha.    
    '
    set nodelistQuestoes = docTransformadoXML.documentElement.Childnodes(0).childnodes
    for i = 0 to nodelistQuestoes.length - 1
                response.Write I + 1 & ") " & nodelistQuestoes(i).text & chr(13) 
            next      
            '
            '            Destrói os objetos criados
            '
            set nodelistQuestoes = nothing
            set docXML = nothing
            set docXSL = nothing
            set docTransformadoXML = nothing
            %>
 
Macro do Word 2000 – Para integrar o WORD com o XML eu defini esta macro no evento “New” e salvei-a como modelo provas.dot. O usuário deve utilizar a opção “Arquivo” + “Novo” para poder escolher o modelo do documento.
Inicialmente a macro está apontando para um site na Internet: http://www.gdez.com.br mas você pode colocar os três arquivos acima em qualquer site e alterar o link.
 
Para inserir a macro entre no Word pressione ALT+F11, escolha o object “thisDocument”, cole a macro abaixo e salve o documento como um modelo do WORD:
 
Private Sub Document_New()
    Dim xmlhttp
    xmlhttp = Null
    Set xmlhttp = CreateObject("microsoft.XMLHTTP")
 
    ActiveDocument.Content = ""
    For i = 1 To 10
        Call xmlhttp.Open("POST", "http://www.gdez.com.br/barbiero/xmlhttp.asp", False)
        xmlhttp.Send
        
        ActiveDocument.Content = ActiveDocument.Content & xmlhttp.responseText
        ActiveDocument.Sections.Add
        
        
    Next
 
End Sub
 
 
 
Colaborou algumas vezes com sites como o www.actionjackson.com". Hoje, vai saber...


0 comentários:
Postar um comentário