1. Introduction L'impression de rapports est généralement un module important du système d'information de gestion, et Excel a été largement utilisé dans l'impression de rapports en raison de ses fonctions puissantes, de son application flexible et de sa grande polyvalence.
Le système d'information de gestion initial a été essentiellement développé en utilisant le modèle client/serveur (C/S). Cependant, avec l'application généralisée du WWW, le système d'information de gestion actuel a progressivement commencé à passer du modèle C/S au modèle navigateur/serveur. Changement de mode (B/S). Le mode B/S possède de nombreuses fonctionnalités que le mode C/S traditionnel ne peut pas égaler, comme être plus ouvert, indépendant des logiciels et du matériel, pratique pour l'expansion des applications et la maintenance et les mises à niveau du système, etc. Il est désormais devenu le mode informatique préféré. pour les réseaux d'entreprise. Il était à l'origine utilisé en mode C/S. De nombreux logiciels sur Internet ont commencé à être transplantés en mode B/S. En raison de la particularité du mode B/S, la fonction d'impression de rapports Excel, relativement simple à mettre en œuvre sous C/S, est devenue une difficulté sous B/S. Cet article donne une meilleure méthode générale basée sur l'expérience résumée dans des projets réels, en prenant ASP comme exemple.
2. Implémentation des fonctions Pour illustrer le problème, voici un exemple. La plate-forme système est Windows 2000+SQL Server 2000+IIS 5.0+ASP 3. Le rapport utilise Excel. Il est nécessaire de générer un rapport sur les statistiques de ventes de livres selon le format de rapport donné et de pouvoir l'imprimer.
2.1 Production d'un modèle de rapport Excel Tout d'abord, créez un modèle Excel (c'est-à-dire le formulaire du rapport à imprimer) selon le format de rapport donné. Bien entendu, les données générées à partir des statistiques dynamiques dans la base de données doivent rester vides. Ce rapport est d'abord dessiné dans Excel, puis enregistré comme modèle et stocké ici, ici sous testbook1.xlt.
2.2 Génération et impression de rapports Excel Le composant Application d'Excel est utilisé ici, qui est installé dans le système lors de l'installation d'Excel. Nos opérations sont également ciblées sur cette composante.
(1) Créer un objet Excel.Application
set objExcel=CreateObject("Excel.Application")
(2) Ouvrez le modèle Excel
objExcel.Workbooks.Open(server.mappath("test")&"book1.xlt") 'Ouvrir le modèle Excel
objExcel.Sheets(1).select 'Sélectionnez la page de travail
set sheetActive = objExcel.ActiveWorkbook.ActiveSheet
(3) Les opérations d'ajout régulières d'Excel telles que sheetActive.range("g4").value=date() 'Ce qui est ajouté ici, c'est le temps, bien sûr, il peut également s'agir de n'importe quelle donnée que vous spécifiez.
(4) Ajoutez des enregistrements dans la base de données dans Excel. On suppose qu'il existe déjà un ensemble de données adoRset, qui stocke les données statistiques générées par les opérations SQL.
num=7 'Commencer à partir de la septième ligne d'Excel
faire jusqu'à ce que adoRset.EOF 'Boucle jusqu'à ce que les données de l'ensemble de données soient écrites
strRange="d"&num&":f"&num 'Définit la zone de l'unité pour remplir le contenu
sheetActive.range(strRange).font.size=10 'Définir la taille de la police
sheetActive.range(strRange).WrapText=false 'Définir l'habillage du texte
sheetActive.range(strRange).ShrinkToFit=true 'Définir s'il faut automatiquement s'adapter à la taille de l'unité de la table
sheetActive.range(strRange).value=array(adoRset("bookid"),adoRset("bookname"),adoRset("author")) 'Remplissez les données de l'ensemble de données dans l'unité correspondante
num=num+1
adoRset.MoveNext
boucle
(5) Sauvegarde et traitement des fichiers de rapport temporaires Excel En fonctionnement réel, il convient de noter que chaque fois qu'un utilisateur imprime un rapport, un fichier Excel temporaire est utilisé au lieu de spécifier de manière rigide le nom du fichier, car si un nom de fichier fixe est utilisé. utilisé, uniquement le premier. Une fois la génération réussie, les opérations suivantes échoueront car un fichier du même nom existe déjà. Nous devons donc générer un nom de fichier temporaire et non répétitif à chaque fois. Ici, nous pouvons utiliser la fonction personnalisée getTemporaryFile() pour le générer, puis le stocker dans la variable filename, et utiliser la variable filepos pour représenter les chemins de ceux-ci. fichiers temporaires.
De plus, si ces fichiers temporaires ne sont pas traités, ils deviendront des fichiers inutiles au fil du temps. Par conséquent, lorsque chaque utilisateur soumet une demande d'impression de rapport Excel, tous les fichiers d'impression temporaires générés précédemment dans le répertoire temporaire doivent d'abord être supprimés.
Le code principal de traitement des fichiers temporaires est le suivant :
fonction getTemporaryFile (myFileSystem)
dimtempFichier, dotPos
tempFile=myFileSystem.getTempName
dotPos=instr(1,tempFile,".")
getTemporaryFile=mid(tempFile,1,dotPos)&"xls"
fonction de fin
set myFs=createObject("scripting.FileSystemObject")
filePos=server.mappath("test") & "tmp" 'Répertoire temporaire pour stocker les fichiers d'impression temporaires
fileName=getTemporaryFile(myFs) 'Obtenir un nom de fichier temporaire
myFs.DeleteFile filePos&"*.xls" 'Supprimer tous les fichiers d'impression temporaires initialement générés dans ce répertoire
définir myFs = rien
Le code de sauvegarde des fichiers temporaires Excel est :
objExcel.ActiveWorkbook.saveas filePos&filename
(6) Quittez l'application Excel
objExcel.quit
set objExcel=Rien
(7) Impression du rapport Excel Les étapes précédentes ont généré le rapport Excel. Pour l'impression à l'étape suivante, il existe deux stratégies :
Option 1 : Fournissez à l'utilisateur le lien vers le fichier temporaire du rapport Excel généré ci-dessus. L'utilisateur peut cliquer directement pour ouvrir le rapport Excel dans le navigateur et l'imprimer via la fonction d'impression du navigateur. Il peut également cliquer avec le bouton droit et enregistrer. localement pour l'impression, etc.
Option 2 : Après avoir généré le rapport Excel, chargez-le directement dans le navigateur côté client. Bien sûr, lorsqu'il n'est pas complètement chargé, il devrait afficher le message « Chargement, veuillez patienter » et d'autres mots.
2.3 Configuration du système et précautions Bien que le code ci-dessus soit très simple, des erreurs se produisent souvent s'il n'est pas utilisé correctement dans la pratique, c'est pourquoi la configuration du système et les précautions mentionnées ci-dessous sont très critiques.
(1) Assurez-vous de garantir l'exactitude de la saisie du code ci-dessus, sinon une fois l'erreur d'opération se produit, l'objet Excel restera dans la mémoire et sera difficile à éliminer, ce qui rendra le prochain appel extrêmement lent et générera une erreur Windows. que la mémoire ne peut pas être lue ou écrite. La solution pour le moment est de vous déconnecter de l'utilisateur actuel. Si cela ne fonctionne pas, vous pouvez uniquement réinitialiser.
(2) Assurez-vous de définir les autorisations du fichier asp responsable de la fonction d'impression. La méthode est la suivante : dans la gestion IIS, sélectionnez le fichier asp, cliquez avec le bouton droit et sélectionnez "Propriétés"/"Sécurité des fichiers"/"Contrôle d'accès anonyme et d'authentification". Ici, IIS utilise par défaut l'accès anonyme et vous devez sélectionner l'accès authentifié ( voici l'authentification de base. Les deux méthodes peuvent être utilisées et l'authentification Windows intégrée, mais la première n'est pas suffisamment sécurisée), ceci est extrêmement important, sinon des erreurs se produiront dans l'application.
(3) Parfois, le rapport est divisé en plusieurs pages et nous souhaitons que chaque page ait le même en-tête. Nous exigeons que l'en-tête soit automatiquement imprimé sur chaque page, ce qui peut être défini dans le modèle Excel. La méthode est la suivante : Sélectionnez le menu "Fichier"/"Mise en page"/"Feuille de travail", puis saisissez le nombre de lignes de votre en-tête dans la zone "Ligne de titre supérieure" (par exemple, si l'en-tête est constitué des lignes 1- 3, remplissez : $1:$3 ).
3. En résumé, nous avons donné un exemple de génération et d'impression de rapports EXCEL en mode B/S écrits en ASP, qui a été bien appliqué dans la pratique. Les faits ont également prouvé que même si le code de cet exemple n'est pas difficile à écrire, vous devez faire attention à la configuration du système. C'est aussi l'expérience acquise après d'innombrables échecs.