IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Open XML exception open excel fichier


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut Open XML exception open excel fichier
    Bonjour à tous !

    J'ai un fichier excel .xlsx qui me sert de template dans mon application C#. Le but est de compléter ce template avec les données qui se trouvent dans différents tableaux de mon application. Pour cela j'utilise Open XML, seulement une exception est soulevée au moment de l'ouverture du fichier :

    "The specified package is invalid. The main part is missing."
    J'ai fait quelques recherches sur le net et il semblait que ce soit un problème d'extension de fichier car Open XML fonctionne qu'avec .xlsx. Le problème c'est que mon fichier est dans le bon format, je l'ai ouvert avec excel 2007, re-enregistré sous en vérifiant bien l'extension donc aucun problème à ce niveau là.

    Je vous poste le code intéressé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public void ExportToExcelPrevJourn(string filename)
    {
    	if (!string.IsNullOrEmpty(filename))
    	{
    		FileInfo templateFile = new FileInfo(@"D:\...\template.xlsx");
    		FileInfo newFile = new FileInfo(@"copy.xlsx");
    		//...//
    		using (ExcelPackage package = new ExcelPackage(newFile, templateFile))
    		{
    			ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
    
    			using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(filename, true))
    			{
    				//...//
    			}
    		}
    		//...//
    	}
    }
    L'exception est déclenchée à la ligne en rouge.
    J'ai beau continuer de chercher sur le net je ne trouve rien...

    Si vous avez besoin de plus d'informations, n'hésitez pas !

    Je vous remercie pour votre aide

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    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 : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    à quoi correspond filename dans le code que tu nous fais suivre ?
    Le path du fichier modèle ? Bizarre tu l'as déjà en dur dans ta fonction.
    Celui du fichier de destination ? Alors il faudrait préférer SpreadsheetDocument.Create(...) plutôt que .Open(...)

    Enfin je connais pas trop ce namespace, je suis juste allé voir cette fiche MSDN.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Bonjour

    Sans apporter une solution, je voulais t'informer qu'il existe une librairie sur codeplex, EEplus qui permet de manipuler les fichiers Excel un peu plus
    facilement qu'OpenXML ne le permet (je pense que cette librairie est plus ou moins basée dessus d'ailleurs, quoi que.. à vérifier).
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    filename correspond comme tu dis, au path de destination du fichier excel où l'utilisateur a choisi de l'enregistré dans son ordinateur.

    Dans ma fonction, c'est le path du template qui est renseigné.

    Oui, maintenant que tu le dis ça parait logique Haha

    J'ai d'autres erreurs qui se soulèvent maintenant, je vais regarder ça et je reviendrais pour faire l'état d'avancement de mon problème

    Je te remercie en tout cas !

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut
    Bonjour TheMonz31, je te remercie de ta réponse. J'ai en effet commencer à travailler avec EEplus, mais mon architecte m'a fait rebasculer sur OpenXML, donc voilà... Haha

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Voilà un architecte qui est bon...

    J'aime bien les gens qui préfèrent une solution compliquée à une solution plus simple sauf si EEPlus ne couvre pas ton besoin... Pourquoi développer la roue ?
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut
    Haha

    Bon finalement j'ai réussi à imposer EEplus

    Et le fonctionnement n'en est que meilleur !

    Je mets le code à ceux dont ça pourrait servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    using DocumentFormat.OpenXml;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Spreadsheet;
    using OfficeOpenXml;
    ...
    {
    	if (!string.IsNullOrEmpty(filename))
    	{
    		// Incorporated resource
    		var fic = Path.Combine(Path.GetTempPath(), "empty_template_prev_journ.xlsx");
    		try
    		{
    			using (var streamReader = new BinaryReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Chemin du template")))
    			{
    				File.WriteAllBytes(fic, streamReader.ReadBytes((int)streamReader.BaseStream.Length));
    			}
     
    			// Taking existing file: 'Sample1.xlsx'. Here 'Sample1.xlsx' is treated as template file
    			//string resTempFile = @"D:\Sopra\workspace_Visual_Studio\Evpt\EVPT\EVPT v3\HeavyClient\AtosOrigin.Airbus.Evpt.UI\empty_template_prev_journ.xlsx";
     
    			// Access to the new file
    			using (var streamDest = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete | FileShare.Inheritable))
    			{
    				// Acces to the template
    				using (var streamTemp = new FileStream(fic, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete | FileShare.Inheritable))
    				{
    					// Create the package from the new file and the template
    					using (ExcelPackage package = new ExcelPackage(streamDest, streamTemp))
    					{
    						// Openning first Worksheet of the template file i.e. 'Sample1.xlsx'
    						ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
     
    						// Fill the excel file
    						worksheet.InsertRow(29, 1, 28);
     
    						worksheet.SetValue(28, 1, "Toto");
    						worksheet.SetValue(28, 2, "Pouet");
    						worksheet.SetValue(29, 1, "Titi");
    						worksheet.SetValue(29, 2, "51");
     
    						// Save the excel file
    						package.Save();
    					}
    				}
    			}
    		}
    		finally
    		{
    			if (File.Exists(fic))
    			{
    				File.Delete(fic);
    			}
    		}
    	}
    }
    Merci pour votre aide et vos pistes
    Bonne journée !

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    comme quoi, en te battant, tu as pu proposer la meilleure solution à ton problème !!!

    C'est bien que ton architecte est acceptée cette solution.

    Par expérience, les projets Codeplex sont souvent de qualité quand même (surtout quand le projet traite d'un sujet fréquent)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un fichier xlsx bien formé avec open xml 2.0
    Par Zysce dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/09/2015, 10h44
  2. formats fichiers Excel XML Open XML
    Par arkhamon dans le forum Excel
    Réponses: 2
    Dernier message: 25/05/2007, 21h55
  3. Réponses: 1
    Dernier message: 29/01/2007, 19h22
  4. levée d'exception sur ouverture fichier excel
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/10/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo