读取 Open Office XML 生成的电子表格时 OleDB 抛出系统资源超出异常

System Resource Exceeded Exception thrown by OleDB when reading Open Office XML generated spreadsheets

我目前正在开发一个 Excel import/export 实用程序,该实用程序利用现有的 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 编写 class 生成的示例电子表格的 LINK。我不想将所有代码复制到这个问题中,因为它相当冗长。不过,如果有必要,我愿意 post。

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

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

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