Использование SSIS для заполнения книги Excel, созданной с помощью OOXML

Мы пытаемся создать книгу 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 и сохраним. Кто-нибудь знает, как это решить?


person Maulik    schedule 12.04.2010    source источник
comment
Можете ли вы показать код, который нужно создать, и добавить ячейки?   -  person David Thielen    schedule 09.06.2011
comment
Вы закрыли документ перед повторной попыткой прочитать его?   -  person Jeroen Bolle    schedule 13.04.2012
comment
задействовано ли пространство имен? xmlns?   -  person D3vtr0n    schedule 26.10.2012
comment
как насчет программного сохранения Excel как CSV и попытки загрузить CSV?   -  person Alex Gordon    schedule 29.11.2012


Ответы (1)


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

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

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

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

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

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

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