2010-04-12 35 views
9

Nous essayons de générer un classeur MS Excel à l'aide de OOXML et de remplir des données à l'aide de SSIS. Nous sommes en mesure de générer des classeurs et des feuilles, également capables de créer des colonnes et d'insérer des données dans la cellule d'en-tête. Nous pouvons également remplir des données en utilisant SSIS. Mais la feuille (DocumentFormat.OpenXml.Spreadsheet.Sheet) et toutes les cellules (DocumentFormat.OpenXml.Spreadsheet.Cell) deviennent OpenXmlUnknownElement. Donc, nous ne sommes pas en mesure de lire feuille/cellule en utilisant le code suivant: Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").SingleOrDefault<Sheet>();Utilisation de SSIS pour remplir le classeur Excel généré à l'aide de OOXML

Nous sommes en mesure de lire le même fichier si nous l'ouvrons d'abord en utilisant MS Excel et enregistrer. Est-ce que quelqu'un sait comment résoudre cela?

+2

Pouvez-vous montrer le code que vous devez créer et ajouter les cellules? –

+0

Avez-vous fermé le document avant d'essayer de le relire? –

+0

Y a-t-il un espace de noms impliqué? xmlns? – D3vtr0n

Répondre

1

Vous avez probablement oublié de donner un nom à votre feuille. Vous pouvez le voir en utilisant

Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault 

et vous verrez que le nom de votre feuille est soit indéfini, soit vide.

Si cela ne vous aide pas. Créez un document simple en code enregistrez-le dans OOXML et ouvrez-le dans un visualiseur XML. puis faites une copie l'ouvrir dans Excel et enregistrez-la et voyez la différence en xml. C'est souvent un bon début de voir ce que Excel a ajouté par défaut au document.

Excel est très tolérant à l'égard des choses que vous avez mal faites lors de la création du document dans le code, et les corrige magiquement lorsque vous ouvrez à nouveau le document.

Un mauvais hack utiliserait interop pour ouvrir le document en l'enregistrant de nouveau dans le code. ce qui réparerait tout pour vous.

Workbook wrkbk = app.Workbooks.Open(@"c:\del.xls"); 
    wrkbk.Save(); 
    wrkbk.Close();