【问题标题】:System Resource Exceeded Exception thrown by OleDB when reading Open Office XML generated spreadsheets读取 Open Office XML 生成的电子表格时,OleDB 引发系统资源超出异常
【发布时间】:2021-01-15 03:16:36
【问题描述】:

我目前正在开发一个 Excel 导入/导出实用程序,该实用程序利用现有的 OleDB 代码进行导入过程,并使用 Open Office XML 生成电子表格。到目前为止,电子表格的生成格式正确,并且可以在 Microsoft Excel 2019 中打开而没有问题。但是由于某种原因,当尝试导入数据时,OleDB 立即抛出异常并失败,异常消息为“系统资源超出”。然而,我发现一个奇怪的解决方法是在 Microsoft Excel 2019 中打开电子表格,然后保存它,然后尝试导入它。这表明我在生成电子表格时做错了。

以下是一些相关代码:

            const query = "Select TOP 25 * from [Sheet1$]";

            var ds = new DataSet();
            var connectionString = $"Provider=Microsoft.Ace.OLEDB.12.0;Data Source={fileName};Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";

            using (var con = new OleDbConnection(connectionString))
            using (var adpt = new OleDbDataAdapter(query, con))
            {
                    adpt.Fill(ds, "[Sheet1$]"); // Exception occurs here
            }
            

            DataTable table = ds.Tables[0];
            return table;

这是我使用 Open Office XML Sheet 写作课程生成的示例电子表格的LINK。我不想将所有代码复制到这个问题中,因为它相当冗长。如果有必要,我愿意发布它。

【问题讨论】:

  • 查找产生错误的文件。在某处保存它的副本。在 Excel 中打开文件并保存。关闭excel。比较两个文件(未修复和已修复)以查看差异。 (搜索例如“文件比较实用程序”并自行选择。)
  • 我试过这个。 Excel 在重新格式化工作表数据的基础上,将几个 xml 文件添加到 .xlsx 包中。简单地做一个差异并找出问题是一项艰巨的任务。我希望对 OleDb、Excel 和 OpenXML 有更多了解的人可能知道发生了什么。
  • 那么值得将该信息添加到问题中。 (评论是暂时的。)

标签: c# excel oledb openxml


【解决方案1】:

虽然这不是最明确的答案,但我最终还是让它发挥了作用。我必须下载 Open XML SDK Productivity Tool,并在我生成的工作表和 Microsoft Excel 在保存时生成的工作表之间进行比较。使用它的代码生成工具和一些耐心,我松散地复制了生成的代码的样子,直到它工作为止。

我的工作簿与其他工作簿之间的显着差异:

  • Microsoft 工作簿基本上在任何地方都利用了共享字符串
  • Microsoft 工作簿包含大量 xml 命名空间声明和装饰器
  • Microsoft 工作簿包含我最初没有添加的其他部分。我最终复制了除主题部分之外的所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多