Feuille de calcul OpenXML corrompue dans Excel

Je travaille avec OpenXML (2.5) pour créer une feuille de calcul personnalisée. Sur la VM que j'utilise, j'ai seulement Open Office dans lequel la feuille de calcul OpenXML fonctionnait bien (avec un formatting personnalisé et tout). Cependant, lorsque vous déplacez le file sur une machine avec Microsoft Office, chaque version du file n'a pas été ouverte en raison de données corrompues. J'ai retiré toute la personnalisation et j'avais encore un résultat corrompu (qui fonctionnait toujours dans Open Office).

C'est le code que j'ai pour un file tableur nu, qui, encore une fois, fonctionne dans Open Office, mais est considéré comme corrompu dans Excel.

public ssortingng CreateGrid() { var path = Path.GetTempFileName(); var document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook); var workbookpart = document.AddWorkbookPart(); workbookpart.Workbook.Save(); document.Close(); return path; } 

L'erreur que je reçois est 'Un caractère invalide a été trouvé dans le contenu du text.' Ligne: 1 Colonne: 1 Décalage de file: 0 Comme vous pouvez le voir dans le code, je n'ajoute pas encore de text, je suis certain que ce ne sont pas des caractères illégaux. Toute aide serait grandement appréciée.

J'ai pu résoudre le problème. Tout d'abord, avec le code ci-dessus, Excel attend un file entièrement formaté lors de l'utilisation d'OpenXML. Cela signifie que le fait d'avoir un file avec un classur ne suffira pas, il faut que le classur, les feuilles de travail et au less 1 feuille s'ouvrent correctement. L'autre problème que j'avais (où datatables ne s'affichent pas dans Excel) était parce que lorsque je traversais des lignes, je ne créais pas une nouvelle ligne à chaque fois. Pour ceux qui ont essayé la même chose que j'étais, le code devrait ressembler à ceci:

 foreach (var temp in tempList) { if (cellIdex == 12) { cellIdex = 0; rowIdex = rowIdex + 1; row = new Row { RowIndex = rowIdex }; sheetData.AppendChild(row); } cell = CreateTextCell(ColumnLetter(cellIdex), rowIdex, tempToSsortingng(), 3); row.AppendChild(cell); cellIdex = cellIdex + 1; } 

La partie la plus importante à noter est la "ligne = nouvelle ligne {RowIndex = rowIdex};". Cela pourrait sembler simple mais m'a causé beaucoup de mal de tête.