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

9
我们正在尝试使用OOXML生成MS Excel工作簿,并使用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打开文件并保存,则可以读取相同的文件。有人知道如何解决这个问题吗?

2
你能展示一下你编写并添加单元格的代码吗? - David Thielen
你在尝试再次阅读它之前关闭了文档吗? - Jeroen Bolle
有命名空间参与吗?xmlns? - D3vtr0n
如何通过编程将Excel文件保存为CSV格式并尝试加载CSV文件呢? - Alex Gordon
1个回答

1

您可能忘记给工作表命名了。您可以通过使用以下方法来查看:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接