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