2016-06-09 1 views
0

Est-ce que quelqu'un est tombé dessus? Je reçois un fichier du client qui est généré via SpreadsheetGear. Il semble bien si je l'ouvre dans ExcelSpreadsheetGear Excel utilisant EPPLUS/NPOI non lisible

Mais il ne peut pas trouver des données dans les cellules si j'essaie de lire EPPLUS ou NPOI

Je crois SpresheetGear manque certaines des propriétés. Mais lequel je ne sais pas

Cela fonctionne, si j'ouvre le fichier Excel, puis enregistrer en tant que fichier différent (taille augmente), puis utiliser le fichier via EPPLUS/NPOI.

Je ne sais pas quoi leur dire, car je ne sais pas ce que rate Spreadsheetgear.

Répondre

0

Il est possible que EPPlus dépend de certains attributs liés à l'adresse de cellule qui sont marqués comme "facultatif" dans le format de fichier Open XML, mais que SpreadsheetGear n'écrit pas par défaut, afin de réduire la taille du fichier .

Si vous avez accès à l'application SpreadsheetGear qui génère ces fichiers, vous pouvez essayer de les modifier pour écrire ces attributs facultatifs dans le format de fichier en définissant IWorkbookSet. Experimental propriété à la chaîne OleDbOpenXmlWorkaround avant d'enregistrer le fichier sur le disque. Par exemple:

SpreadsheetGear.IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet(); 
workbookSet.Experimental = "OleDbOpenXmlWorkaround"; 
SpreadsheetGear.IWorkbook workbook = workbookSet.Workbooks.Open(@"C:\myWorkbook.xlsx"); 
workbook.Save(); 

Similaire à l'enregistrement de ce fichier via Excel, vous devriez constater que le fichier résultant est plus grand qu'avant.

1

J'ai le même problème avec un fichier xlsx généré par SpreadsheetGear (par un fournisseur externe) que j'essaye d'analyser en utilisant EPPlus. Quand je parcours mon code, je peux voir que toutes les valeurs des cellules sont présentes, mais elles sont stockées hors séquence (la valeur de la cellule A1 apparaît dans la fente pour la cellule A17, par exemple). Similaire à ce que Tim a posté, le fichier créé par SpreadsheetGear contient des données de cellule qui n'ont pas de références de cellule (A1, B3, H17, ...). Cette semble être une valeur requise en fonction de ma lecture du document de spécification (disponible here) à la page 19 (sur plus de 5000 pages)

J'ai validé que c'est mon problème en modifiant manuellement le entrant Fichier xlsx (vous pouvez le faire en renommant le fichier en extension .zip, puis en modifiant manuellement le fichier sheet.xml approprié et en ajoutant la version mise à jour au fichier zip, en le renommant xlsx et en réessayant.)

Dans mon cas, j'ai ajouté la référence de cellule manquante à l'élément 'c' sous sheetData/row (r = "A1" pour indiquer la colonne 1, ligne 1, par exemple) de certaines (mais pas toutes) des cellules qui étaient disparu cet attribut. Apparemment, cela suffisait à "tromper" l'analyseur de fichiers EPPlus pour savoir comment traiter les données entrantes.

Bien qu'informative, cette connaissance ne me fait pas vraiment du bien car j'essaye de traiter un fichier dont la génération est totalement hors de mon contrôle. Peut-être que pour d'autres, ce ne sera pas le cas.

+0

Je devrais ajouter que les problèmes que je voyais étaient limités aux valeurs de cellule 'texte'. Cela peut être lié à la façon dont EPPlus traite les cellules qui nécessitent une recherche dans la ressource 'sharedStrings.xml' que toutes les valeurs de cellules basées sur le texte font référence. – rickus123