1. Introdução A impressão de relatórios é geralmente um módulo importante no sistema de informações de gerenciamento, e o Excel tem sido amplamente utilizado na impressão de relatórios devido às suas funções poderosas, aplicação flexível e grande versatilidade.
O sistema de informação de gestão inicial foi desenvolvido basicamente usando o modelo cliente/servidor (C/S). No entanto, com a aplicação generalizada da WWW, o atual sistema de informação de gestão começou gradualmente a mudar do modelo C/S para o navegador/servidor. (B /S) mudança de modo. O modo B/S tem muitos recursos que o modo C/S tradicional não consegue igualar, como ser mais aberto, independente de software e hardware, conveniente para expansão de aplicativos e manutenção e atualizações de sistema, etc. para redes corporativas. Foi originalmente usado em C/S. Muitos softwares na Internet começaram a ser transplantados para o modo B/S. Devido à particularidade do modo B/S, a função de impressão de relatórios Excel, que é relativamente fácil de implementar no C/S, tornou-se uma dificuldade no B/S. Este artigo fornece um método geral melhor baseado na experiência resumida em projetos reais, tomando ASP como exemplo.
2. Implementação da função Para ilustrar o problema, aqui está um exemplo. A plataforma do sistema é Windows 2000+SQL Server 2000+IIS 5.0+ASP 3. O relatório utiliza Excel. É necessário gerar um relatório de estatísticas de vendas de livros de acordo com o formato de relatório fornecido e poder imprimi-lo.
2.1 Produção de modelo de relatório Excel Primeiro, faça um modelo Excel (ou seja, o formato do relatório a ser impresso) de acordo com o formato de relatório fornecido. É claro que os dados gerados a partir de estatísticas dinâmicas no banco de dados devem ser deixados em branco. Este relatório é primeiro desenhado no Excel, depois salvo como modelo e armazenado aqui, aqui como testbook1.xlt.
2.2 Geração e impressão de relatórios Excel Aqui é utilizado o componente Aplicativo do Excel, que é instalado no sistema quando o Excel é instalado. Nossa atuação também está voltada para esse componente.
(1) Criar objeto Excel.Application
definir objExcel=CreateObject("Excel.Application")
(2) Abra o modelo Excel
objExcel.Workbooks.Open(server.mappath("test")&"book1.xlt") 'Abrir modelo Excel
objExcel.Sheets(1).select 'Selecione a página de trabalho
definir planilhaActive=objExcel.ActiveWorkbook.ActiveSheet
(3) Operações regulares de adição do Excel, como sheetActive.range("g4").value=date() 'O que é adicionado aqui é o tempo, é claro que também pode ser qualquer dado que você especificar.
(4) Adicionar registros no banco de dados no Excel Supõe-se que já exista um conjunto de dados adoRset, que armazena dados estatísticos gerados por operações Sql.
num=7 'Começa na sétima linha do Excel
faça até adoRset.EOF 'Loop até que os dados no conjunto de dados sejam gravados
strRange="d"&num&":f"&num 'Define a área da unidade para preencher o conteúdo
sheetActive.range(strRange).font.size=10 'Definir tamanho da fonte
sheetActive.range(strRange).WrapText=false 'Definir quebra automática de texto
sheetActive.range(strRange).ShrinkToFit=true 'Defina se deseja adaptar automaticamente ao tamanho da unidade da tabela
sheetActive.range(strRange).value=array(adoRset("bookid"),adoRset("bookname"),adoRset("author")) 'Preencha os dados no conjunto de dados na unidade correspondente
num=num+1
adoRset.MoveNext
laço
(5) Salvamento e processamento de arquivos de relatório temporários do Excel Na operação real, deve-se observar que cada vez que um usuário imprime um relatório, um arquivo Excel temporário é usado em vez de especificar rigidamente o nome do arquivo, porque se for um nome de arquivo fixo. usado, apenas o primeiro. Depois que a geração for bem-sucedida, as operações subsequentes falharão porque já existe um arquivo com o mesmo nome. Portanto, precisamos sempre gerar um nome de arquivo temporário e não repetitivo. Aqui podemos usar a função getTemporaryFile() personalizada para gerá-lo e, em seguida, armazená-lo na variável filename e usar a variável filepos para representar os caminhos destes. arquivos temporários.
Além disso, se esses arquivos temporários não forem processados, eles se tornarão lixo de arquivo com o tempo. Portanto, quando cada usuário enviar uma solicitação de impressão de relatório do Excel, todos os arquivos de impressão temporários gerados anteriormente no diretório temporário deverão ser excluídos primeiro.
O código principal para processamento de arquivos temporários é o seguinte:
função getTemporaryFile(meuSistema de Arquivos)
dimtempFile,pontoPos
tempFile=meuSistema de Arquivo.getTempName
dotPos=instr(1,tempFile,".")
getTemporaryFile=mid(tempFile,1,pontoPos)&"xls"
função final
definir myFs=createObject("scripting.FileSystemObject")
filePos=server.mappath("test") & "tmp" 'Diretório temporário para armazenar arquivos de impressão temporários
fileName=getTemporaryFile(myFs) 'Obtém um nome de arquivo temporário
myFs.DeleteFile filePos&"*.xls" 'Exclui todos os arquivos de impressão temporários gerados originalmente neste diretório
definir meusFs = nada
O código para salvar arquivos temporários do Excel é:
objExcel.ActiveWorkbook.saveas arquivoPos&nome do arquivo
(6) Saia do aplicativo Excel
objExcel.quit
definir objExcel=Nada
(7) Impressão do relatório Excel As etapas anteriores geraram o relatório Excel Para impressão na próxima etapa, existem duas estratégias:
Opção 1: Fornecer ao usuário o link para o arquivo temporário do relatório Excel gerado acima. O usuário pode clicar diretamente para abrir o relatório Excel no navegador e imprimi-lo através da função de impressão do navegador. localmente para impressão, etc.
Opção 2: Após gerar o relatório Excel, carregue-o diretamente no navegador do lado do cliente. Claro, quando não estiver totalmente carregado, deverá aparecer "Carregando, aguarde" e outras palavras.
2.3 Configuração do sistema e precauções Embora o código acima seja muito simples, muitas vezes ocorrem erros se não for usado corretamente na prática, portanto a configuração do sistema e as precauções mencionadas abaixo são muito críticas.
(1) Certifique-se de garantir a exatidão da entrada do código acima, caso contrário, quando ocorrer um erro de operação, o objeto Excel permanecerá na memória e será difícil de eliminar, fazendo com que a próxima chamada seja extremamente lenta e gere um erro do Windows que a memória não pode ser lida ou escrita. A solução neste momento é sair do usuário atual. Se isso não funcionar, você só pode redefinir.
(2) Certifique-se de definir as permissões do arquivo asp responsável pela função de impressão. O método é: No gerenciamento do IIS, selecione o arquivo asp, clique com o botão direito e selecione "Propriedades"/"Segurança de Arquivo"/"Acesso Anônimo e Controle de Autenticação". Aqui, o padrão do IIS é o acesso anônimo e você deve selecionar o acesso autenticado (). aqui está a autenticação básica Ambos os métodos podem ser usados e autenticação integrada do Windows, mas o primeiro não é seguro o suficiente), isso é extremamente importante, caso contrário ocorrerão erros no aplicativo.
(3) Às vezes, o relatório é dividido em várias páginas e queremos que cada página tenha o mesmo cabeçalho. Exigimos que o cabeçalho seja impresso automaticamente em cada página, que pode ser definido no modelo Excel. O método é o seguinte: Selecione o menu "Arquivo"/"Configurar página"/"Planilha" e insira o número de linhas do seu cabeçalho na "Linha de título superior" (por exemplo, se o cabeçalho for das linhas 1- 3, preencha: $1:$3 ).
3. Em resumo, demos um exemplo de geração e impressão de relatórios EXCEL em modo B/S escritos em ASP, que tem sido bem aplicado na prática. Os fatos também provaram que embora o código deste exemplo não seja difícil de escrever, você deve prestar atenção à configuração do sistema. Esta é também a experiência adquirida após inúmeras falhas.