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

我们正在尝试使用OOXML生成MS Excel工作簿,并使用SSIS填充数据。 我们能够生成工作簿和工作表,也能够在标题单元格中创build列和插入数据。 我们也可以使用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打开并保存,我们可以读取同一个文件。 有谁知道如何解决这个问题?

你可能忘了给你的工作表命名。 你可以看到这个使用

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

你会发现你的表名是未定义的或垃圾文本。

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

Excel非常容忍在代码中创build文档时做错的事情,并在再次打开文档时魔法修复它们。

一个糟糕的黑客会使用互操作来打开文件再次保存在代码中。 这将为你解决一切。

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