使用SSIS填充使用OOXML生成的Excel工作簿

Mau*_*lik 9 excel ssis openxml spreadsheetml openxml-sdk

我们正在尝试使用OOXML生成MS Excel工作簿并使用SSIS填充数据.我们能够生成工作簿和工作表,还能够在标题单元格中创建列和插入数据.我们还可以使用SSIS填充数据.

但Sheet(DocumentFormat.OpenXml.Spreadsheet.Sheet)和所有单元格(DocumentFormat.OpenXml.Spreadsheet.Cell)成为OpenXmlUnknownElement.因此,我们无法使用以下代码读取工作表/单元格:Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").SingleOrDefault<Sheet>();

如果我们首先使用MS Excel打开并保存,我们可以读取相同的文件.有谁知道如何解决这个问题?

Arc*_*ght 1

您可能忘记给工作表命名。你可以通过使用来看到这一点

    Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault 
Run Code Online (Sandbox Code Playgroud)

您会看到您的工作表名称要么是未定义的,要么是垃圾文本。

如果这没有帮助。用代码创建一个简单的文档,将其保存在 OOXML 中并在 xml 查看器中打开。然后制作一个副本,在 Excel 中打开并保存,然后查看 xml 中的差异。查看 excel 默认添加到文档中的内容通常是一个好的开始。

Excel 非常容忍您在代码中创建文档时所做的错误,并在您再次打开文档时神奇地修复它们。

一个糟糕的黑客方法是使用互操作性来打开文档,然后将其再次保存在代码中。这将为您解决一切问题。

    Workbook wrkbk = app.Workbooks.Open(@"c:\del.xls");
    wrkbk.Save();
    wrkbk.Close();
Run Code Online (Sandbox Code Playgroud)