使用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();