Le contenu illisible dans le fichier Excel généré avec EPPlus

Je vais avoir un petit problème lorsque je créer un fichier Excel à partir d'un modèle, à l'aide de la EPPlus de la bibliothèque. Le fichier a une première feuille de calcul qui contient les données utilisées pour le remplissage des tableaux croisés dynamiques dans les fiches suivantes.

Quand j'ouvre le fichier généré, j'obtiens le message d'erreur suivant :
"Excel a trouvé du contenu illisible dans 'sampleFromTemplate.xlsx'. Voulez-vous récupérer le contenu de ce classeur ? - Je vous faire confiance à la source de ce classeur, cliquez sur Oui."

J'ai évidemment cliquez sur oui, puis obtenir un résumé de la réparation effectuée sur le fichier, et un lien vers un format xml fichier journal contenant ceci :

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <logFileName>error095080_01.xml</logFileName>
    <summary>Errors were detected in file  'C:\TEMP\sampleFromTemplate.xlsx'</summary>
    <repairedRecords summary="Following is a list of repairs:">
        <repairedRecord>Repaired Records: Table from /xl/tables/table1.xml part (Table)</repairedRecord>
    </repairedRecords>
</recoveryLog>

C'est apparemment causée par une plage nommée ("Table1") que je définis dans mon code pour indiquer que les données pour être utilisés pour les tableaux croisés dynamiques. Il y a déjà un "Nom de Table" dans le modèle appelé "Table1", mais je n'arrive pas à y accéder par le biais de la ExcelPackage.Feuille de calcul.Les noms de collection. Étant nouveau EPPlus et pas très expérimenté avec Excel, je ne comprends pas d'où je fais mal. Voici le bout de code où j'générer le fichier :

private string GenerateFromTemplate(string fileName, string templateName, DataTable tab)
{
    FileInfo newFile = new FileInfo(string.Format("C:\\MyPath\\{0}.xlsx", fileName));
    FileInfo templateFile = new FileInfo(string.Format("C:\\MyPath\\{0}.xlsx", templateName));

    try
    {
        using (ExcelPackage pkg = new ExcelPackage(newFile, templateFile))
        {
            ExcelWorksheet sheet = pkg.Workbook.Worksheets["MyDataSheet"];
            ExcelRange range = sheet.Cells[string.Format("A1:U{0}", dt.Rows.Count)];
            pkg.Workbook.Names.Add("Table1", range as ExcelRangeBase);

            int sheetRowIndex = 2;

            foreach (DataRow row in this.dt.Rows)
            {
                sheet.Cells[sheetRowIndex, 1].Value = row["Row1"];
                sheet.Cells[sheetRowIndex, 2].Value = row["Row2"];
                [...]
                sheet.Cells[sheetRowIndex, 21].Value = row["Row21"];

                sheetRowIndex++;
            }

            pkg.Save();
            return newFile.FullName;
        }
    }
    catch (IOException ex) { return ex.Message; }
}

Noter que les tableaux croisés dynamiques sont correctement renseignées, de toute façon, alors pourquoi est-ce qui se passe ?

Merci 🙂

Les noms définis comme Table1 sont habituellement réservés pour les les tableaux Excel (bien qu'il est possible d'utiliser des noms tels que pour les non-table des plages). Qu'advient-il si vous appelez la gamme de quelque chose comme Foo1.
Je n'ai pas l'erreur, mais mon pivot tables ne fonctionnent plus. J'ai oublié de dire que le "Table1" plage nommée existe déjà dans le modèle. Je vais modifier ma question tout de suite...

OriginalL'auteur ZipionLive | 2014-01-03