2017-08-25 5 views
0

Je travaille sur un projet utilisant C# et OpenXML. Je reçois une erreur en disant "Excel a été en mesure d'ouvrir le fichier en repoaring ou en supprimant le contenu illisible".OpenXML C# - Qu'est-ce qui détermine le nom de "sheet.xml" dans une structure de fichier Office ouvert?

Je sais pourquoi l'erreur se produit (les cellules fusionnées sont ajoutées avec des plages conflictuelles), je suis cependant confus sur le nom de /xl/worksheets/sheets__.xml. La plupart sont nommés respectivement sheet1, sheet2, etc. Parfois, ils sont nommés "sheet1e.xml" ou "sheet1d.xml".

Si je sauvegarde le fichier après excel fait la réparation, je suis capable de l'ouvrir dans Open XML SDK Productivity Tool. Je ne vois pas les feuilles nommées de cette façon cependant. Renommer le fichier en extension ".zip" Je peux voir les feuilles correctement nommées "sheet1e.xml" comme l'erreur indiquée.

Je pensais les nommer comme cela préserverait que dans la structure du fichier:

 document.WorkbookPart.Workbook.Sheets.AppendChild(new Sheet() 
     { 
      Id = document.WorkbookPart.GetIdOfPart(worksheetPart), 
      SheetId = (UInt32)counter, 
      Name = "Sheet_" + counter 
     }); 

Je dois manquer quelque chose .. Est-il possible de définir les noms des fichiers .xml pour correspondre à ce qui est dit dans l'erreur; J'espérais qu'il y aurait donc au moins l'utilisateur sait sur quelle feuille le problème est arrivé et peut corriger les données qui se chevauchent dans la base de données. Peut-être que je ne devrais pas définir le nom du tout?

Mise à jour

Je crois que j'ai trouvé la raison, mais ne comprends pas pourquoi. Serait agréable d'entendre quelqu'un avec plus de connaissances que moi-même. Il semble que, après la feuille 25, ils ont été nommés sheet1A, 1B, etc. Supprimer le "_" de mon nom de feuille a résolu le problème.

Répondre

0

Le format OpenXML est une structure zip de fichiers xml et de quelques fichiers supplémentaires. Tous ces fichiers ont des relations définies entre eux.

Par exemple Sheet1.xml doit être présent dans:

[Content_Types] .xml

Remplacer ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet + xml " PartName ="/xl/worksheets/sheet1.xml "

et

xl/workbook.xml

feuille r: id = "rId1" sheetId = "1" name = "SheetName"

Le corespondency pour r:id="rId1" peut être trouvé dans:
xl/_rels/workbook.xml.rels

Relation Cible = "feuilles de calcul/feuille1.xml " type =" http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet » Id = "rId1"

cible Relation nous montre que xl/feuilles/sheet1 .xml est la définition de la feuille.

le nom de sheet1.xml ne doit pas être changé. vous devriez être aussi faire attention si vous changez le sheetID.

de plus, le numéro 1 du nom, sheet1.xml , ne veut pas dire que c'est le première feuille dans le fichier Excel. L'ordre des feuilles est donné par autre chose.

+0

merci !! ça aide beaucoup à expliquer :) – hackingchemist