【问题标题】:Use SSIS to populate Excel workbook generated using OOXML使用 SSIS 填充使用 OOXML 生成的 Excel 工作簿
【发布时间】:2010-04-12 03:25:16
【问题描述】:

我们正在尝试使用 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 打开并保存,我们可以读取相同的文件。有谁知道如何解决这个问题?

【问题讨论】:

  • 你能展示你必须创建和添加单元格的代码吗?
  • 您在尝试再次阅读之前是否关闭了文档?
  • 是否涉及命名空间? xmlns?
  • 以编程方式将 excel 保存为 csv 并尝试加载 csv 怎么样?

标签: excel ssis openxml openxml-sdk spreadsheetml


【解决方案1】:

您可能忘记为工作表命名。您可以使用

看到这一点
    Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault 

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

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

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

一个糟糕的 hack 将使用互操作打开文档,再次将其保存在代码中。它将为您解决所有问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2018-02-26
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多