Используйте SSIS для заполнения книги Excel, созданной с использованием OOXML - PullRequest
9 голосов
/ 12 апреля 2010

Мы пытаемся создать рабочую книгу MS Excel с использованием OOXML и заполнить данные с помощью служб SSIS. Мы можем создавать рабочую книгу и листы, а также создавать столбцы и вставлять данные в ячейку заголовка. Мы также можем заполнять данные с помощью служб SSIS.

Но Лист (DocumentFormat.OpenXml.Spreadsheet.Sheet) и все ячейки (DocumentFormat.OpenXml.Spreadsheet.Cell) становятся OpenXmlUnknownElement. Поэтому мы не можем прочитать лист / ячейку, используя следующий код: Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").SingleOrDefault<Sheet>();

Мы можем прочитать один и тот же файл, если сначала откроем его в MS Excel и сохраним. Кто-нибудь знает, как решить эту проблему?

1 Ответ

1 голос
/ 12 декабря 2012

Вы, вероятно, забыли дать вашему листу имя. Вы можете увидеть это, используя

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

и вы увидите, что имя вашего листа либо не определено, либо является мусорным текстом.

Если это не поможет. Создайте простой код в коде, сохраните его в OOXML и откройте в программе просмотра XML. затем сделайте копию, откройте ее в Excel, сохраните и посмотрите разницу в xml. Часто это хорошее начало, чтобы увидеть, что Excel добавил по умолчанию в документ.

Excel очень терпимо относится к вещам, которые вы сделали неправильно при создании документа в коде, и волшебным образом исправляет их при повторном открытии документа.

Плохой взлом будет использовать interop для открытия документа, сохраняя его снова в коде. который все исправит для вас.

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