2011-11-28 1 views
0

Je tente de modifier un fichier .xlsm fourni par le client (une application C# remplira les données d'un formulaire web et soumettre à un CMS) en utilisant EPPlus.EPPlus renvoie l'exception DataValidations "La valeur demandée 'date' n'a pas été trouvée." en essayant de sauver xlsm

Mais sur package.Save (nom) - ou packagae.SaveAs (nom) - une exception est levée par la collection DataValidations:

2011-11-28 14:17:51,380 [9] ERROR app.ExcelConverter - System.ArgumentException: Requested value 'date' was not found. 
    at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument) 
    at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult) 
    at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
    at OfficeOpenXml.DataValidation.ExcelDataValidationCollection..ctor(ExcelWorksheet worksheet) 
    at OfficeOpenXml.ExcelWorksheet.get_DataValidations() 
    at FItoExcelCore.ExcelConverter.RunSample(String filePath) in \path\to\class.cs:line 32 

tenter même worksheet.DataValidations.Clear() renvoie la même exception, et ce est sans aucune modification au fichier:

 try 
     { 
      using (ExcelPackage package = new ExcelPackage(output)) 
      { 
       package.SaveAs(output); 
      } 
     } 
     catch (Exception ex) 
     { 
      _log.Error(ex.ToString()); 
     } 

Je n'ai pas ce comportement dans un fichier Excel que je crée de toutes pièces, mais j'ai besoin d'utiliser le fichier fourni.

Je ne sais pas si c'est important, mais je travaille dans le Framework .Net 4, et c'est un fichier .xlsm de 1,01 Mo. Le fichier enregistre/enregistre-aussi bien (même avec de nouvelles données) à partir d'Excel.

REMARQUE: apparemment .xlsx fichiers fonctionnent très bien, mais le format .xlsm contient des macros VBA qui ne peuvent pas être enregistrés dans le format .xlsx, de sorte que le type de fichier ne peut pas être converti.

+0

Une question SO non résolue suggère également que EPPlus ne fonctionne pas pour les fichiers xlsm: http://stackoverflow.com/questions/6336803/library-for-c-sharp-to-read-excel-2007-xlsm-file –

Répondre

1

Comme d'habitude, dans les soixante secondes de l'affichage, je trouve de nouvelles informations en ligne.

Il y a un discussion sur le site CodePlex EPPlus qui suggère que

« il n'y a pas de support réel pour [fichiers xlsm] dans le composant. » Le peut être la source du problème.

+0

Je n'ai pas été en mesure d'obtenir une confirmation officielle de ceci dans les forums EPPlus, donc je laisse cet espace ouvert un peu plus longtemps. –

+0

J'ai reçu une réponse de quelqu'un d'EPPlus disant qu'il y avait un bug, mais le correctif fourni ne fonctionnait toujours pas (en fait, il n'ouvrait même pas du tout, et encore moins l'épargne). https://epplus.codeplex.com/discussions/281085 –

+0

Donc, je vais avec la réponse de facto de "EPPlus ne supporte pas [entièrement] les fichiers .xslm." –

0

Avez-vous la dernière version d'EPPlus?

Ils ont corrigé ce problème en mars 2011. Cela tenait à ce que ValidationTypes ne soit pas sensible à la casse.

Voir: http://epplus.codeplex.com/workitem/13246

Modifier: Vous pouvez également essayer de l'enregistrer au format .xlsx si xlsm est pas pris en charge.

+0

J'utilise EPPlus 2.9.0.1 de (je crois) Mar 31 mai 2011 à 3h00 - Je viens de le télécharger le mercredi 23 novembre. –

+0

Hmm..c'est bien sûr une erreur enum ... même que vous d 'obtenir des enums réguliers en C# lorsque vous essayez de trouver une correspondance pour un élément qui n'est pas dans l'énumération. Utilisez-vous "date" n'importe où dans votre code?Je crois que EPPlus utilise 'datetime' pour les cellules Excel. –

+0

Ne l'utilise nulle part. Vous ne pouvez même pas le trouver dans le fichier existant (autre que les étiquettes pour les champs où une date doit être entrée). –

0

Comme Ed Wrote, j'ai téléchargé la dernière version d'EPPlus qui date du 31 janvier 2012, et cela a très bien fonctionné avec sa validation. La lecture et l'écriture excel est un format .xlsx.

+1

vous ne pouvez pas enregistrer le projet VB (macro-code qui est ajouté au format .xlsm) au format .xlsx –

Questions connexes