gpt4 book ai didi

c# - 在 ASP.NET : Data not being read if column has different data formats 中读取 Excel

转载 作者:行者123 更新时间:2023-11-30 22:48:23 25 4
gpt4 key购买 nike

我有一个 asp.net C# 应用程序,我在其中使用 OLEDBConnection 读取电子表格的内容。我正在使用下面的代码行从 Excel 电子表格中读取数据。

 OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fullFilePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");

我的一个专栏有各种格式的数据,如字符串、数字、日期等,在不同的行中。运行时,当数据格式不同时,它不会从 excel 文件中读取该值。我在网上搜索了很多,发现我们需要在连接字符串中提及 IMEX 属性。我添加了它,但没有正面回应!。

经过大量浏览后,我发现任何内置的 Excel 驱动程序都会查询工作表的前 8 行,然后(在未经您许可或不知情的情况下)确定它是什么类型的列,从而忽略任何稍后在工作表中不符合此数据类型。

http://www.mattjwilson.com/blog/2009/02/13/microsoft-excel-drivers-and-imex/

有什么办法可以解决这个问题吗?

最佳答案

您正在使用 JET 引擎的众多有趣功能之一。这基本上将对每一列的每一行中的所有数据进行采样,并尝试猜测数据格式。如果您希望您的代码“正常工作”,那么注册表设置将有助于此。但是请注意,此注册表设置将影响 JET 如何处理系统上的所有导入,而不仅仅是您的特定导入。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
"ImportMixedTypes"="Text"
"TypeGuessRows"=dword:00000000

此注册表设置将告诉 JET 在猜测格式之前检查列中每一行的格式。如果它找到混合内容,它将将该行导入为文本。

默认JET 在类型猜测时测试前 25 行。

或者,您可以将 TypeGuessRows 更改为 1,这样 JET 将仅在猜测类型时检查第一行。这意味着如果第一行是数字而第二行是字符串,JET 将假定所有行都是数字,您将无法使用 ADO.NET 读取它们

另一个警告:确保在编辑注册表时小心。如果您不小心,您的系统可能会很快崩溃。

关于c# - 在 ASP.NET : Data not being read if column has different data formats 中读取 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com