Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 15h35   #1
Invité régulier
 
Homme
Développeur informatique
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 5
Points : 5
Par défaut Génération fichier Excel à partir d'un template xlt en ASPNET sous Windows 7

ASPNET 3.5 / Excel 2003

J'ai ajouté dans une application aspnet 3.5 déjà existante la capacité de générer à partir d'un template xlt 2003, un fichier xls à partir de données extraites de bases SQL Server.

En config de dev sous visual studio 2008, tout fonctionne parfaitement et le fichier de sortie xls est généré sans souci.

Une fois cette nouvelle version de cette application déployée sous Windows 7 de nombreux soucis d'accès/config se posent et empêchent la génération de se réaliser.

On a essayé l'affectation d'un profil admin au DCOM Excel, au pool dédié à l'application et au dossier abritant le fichier xlt, de déclarer une Identité pour un utilisateur interactif sur le DCOM et évidemment de tenter cette génération en loggant en session (profil admin) sur le serveur.
Aucune configuration fonctionnant sous xp ne semble permettre de générer du fichier Excel à partir d'un template sous Windows 7.

Les erreurs sont tour à tour "Impossible d'utiliser des objets liés et incorporés", le fichier (xlt) n'est pas présent, erreur sous la session.

La génération d'un fichier Excel fonctionne, mais pas à partir du chargement d'un template.
Lorsque le chargement d'un template se passe bien, c'est la génération qui plante.

Quelqu'un connaitrait-il une configuration qui permette de réaliser cette génération à partir d'un template en aspnet sous Windows 7.
joey_5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 17h33   #2
Invité régulier
 
Homme
Développeur informatique
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 5
Points : 5
Par défaut Solution trouvée

Je n'ai pas résolu le problème, mais j'ai opté pour l'utilisation de NPOI, portage de POI Java en dotnet.

Le résultat est presque parfait.
Aucun besoin de droits.
Aucun besoin d'utiliser le DCOM Excel sur le serveur.
Les dll de NPOI sont dans votre projet ou votre site et génèrent vos Excel 2 à 3 fois plus rapidement que Excel en plus et sans aucun problème de droit !

IDEAL pour un déploiement sur serveur !



Génération d'un Excel en utilisant un template :

1 - Instanciation du Worbook (sans faire appel à un objet application) :
Code :
1
2
     fs = new FileStream(adresseFichierTemplate, FileMode.Open, FileAccess.Read);
     HSSFWorkbook  xlBook = new HSSFWorkbook(fs, true);
2 - Accès aux feuilles une par une (pas d'accès à la collection de toutes les feuilles) :
Code :
      xlSheet = xlBook.GetSheetAt(i);
3- Accès à une ligne d'une feuille (pas d'accès à la collection de toutes les lignes rows) :
Code :
HSSFRow row = xlSheet.GetRow(i);
4 - Accès à une cellule (index de colonne dans un row ou ligne) :
Code :
HSSFCell cell = row.GetCell(j);


CODES pratiques :

Accès et/ou affectation de la feuille par défaut (focus) :
Code :
1
2
3
4
Int32? indexColonneDeBinding = null;
indexSheetActiveTemplate = xlBook.ActiveSheetIndex;
 
xlBook.ActiveSheetIndex = indexSheetActiveTemplate;

Création d'un style pour changer le background (et je dis bien le background !) en appliquant une font :
Code :
1
2
3
4
5
6
7
 HSSFFont font = xlBook.CreateFont();
font.FontHeightInPoints = 10;
font.FontName = HSSFFont.FONT_ARIAL;
font.Color = HSSFColor.BLACK.index;
style.SetFont(font);
style.FillForegroundColor = HSSFColor.RED.index;
style.FillPattern = HSSFCellStyle.SOLID_FOREGROUND;
Application du style :
Votre cellule aura un fond rouge.



ATTENTION, il y un piège. NPOI considère que votre feuille se résume à peu près au tableau que vous avez défini dans votre template. Donc si vos données vont au-delà en nombre de colonnes et de lignes que le "tableau" défini dans la feuille de votre template vous devrez faire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
HSSFRow row = xlSheet.GetRow(i);
HSSFCell cell = null;
 
if (row != null)
      cell = row.GetCell(j);
else
{
     xlSheet.CreateRow(i);
     row = xlSheet.GetRow(i);
     cell = row.GetCell(j);
}
 
if (cell != null)
{
    cell.SetCellValue(valeur);
    cell.Sheet.ForceFormulaRecalculation = true;
}
else if (row != null)
{
    row.CreateCell(j, HSSFCell.CELL_TYPE_BLANK);    
    cell = row.GetCell(j);
    cell.SetCellValue(valeur);
    cell.Sheet.ForceFormulaRecalculation = true;
}
 
row.CreateCell(j, HSSFCell.CELL_TYPE_BLANK); crée une colonne standard !!!
AUTRE PIEGE la valeur est typée dans NPOI, contrairement à Excel ou la valeur à insérer dans une cellule était object. Donc, NPOI castera cette valeur et ne laissera pas le choix à Excel.
Donc, pour les formules, celles-ci doivent respecter le format culturelle qui sera utilisé dans Excel soit en français =SOMME(A2;B7) par exemple. La valeur sera du type String et il ne faudra pas omettre la ligne cell.Sheet.ForceFormulaRecalculation = true; qui force le respect du format de votre template (nombre de chiffres après la virgule, formule insérée, formule existante non insérée, etc.).

Et par sécurité, à la fin de la génération :
Code :
xlSheet.ForceFormulaRecalculation = true;
N'hésitez plus et abondonnez définitivement la bibliothèque interop d'Excel !
joey_5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h55.


 
 
 
 
Partenaires

Hébergement Web