【问题标题】:Jet Engine - 255 character truncationJet Engine - 255 个字符截断
【发布时间】:2010-12-03 21:46:17
【问题描述】:

我需要将一个 Excel 电子表格导入我的程序并具有以下代码:

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;IMEX=1;HDR=NO;""", MyExcelFile.xls);

command.CommandText = "SELECT * FROM [Sheet1$]";

(注意,上面的代码不是真正的代码,但应该让你看到我在做什么)

我正在导入文件,唯一的问题是 Excel 工作表中超过 255 个字符的列被截断。

有什么办法可以解决这种情况吗?

我在某处读到,如果您确保在前 8 行内的列中有一长行文本,那么它将被视为备注字段,因此不会被截断,但这似乎不起作用。

有什么想法吗?

格雷姆

【问题讨论】:

    标签: .net excel import oledb jet


    【解决方案1】:

    几次碰到这个。幸运的是,有一个注册表黑客要修复,在 MSDN 上描述:http://support.microsoft.com/kb/189897

    实际上,Excel 只查看前八行数据来确定列的长度。如果长度为 255 个字符或更少,则默认值为 255。我在上面引用的 MSDN 文章解释了如何添加一个注册表项“TypeGuessRows”,它告诉 Excel 要扫描多少行以确定列长度。

    【讨论】:

    • 是的,这就是我在原始帖子中的意思——检查了我的注册表,TypeGuessRows 值为 8。我故意在每列的第 2 行中输入一个 500 个字符长的值大数据,但这似乎没有任何区别......
    • 来自blog.lab49.com/archives/196 的想法是,您可以为此注册表项使用介于 0 和 16 之间的值。 0 表示读取前 16000 行,1 到 16 表示读取前 1 到 16 行。所以设置为 500 是行不通的,但是设置为 0 应该可以。
    【解决方案2】:

    您的问题可能有一个更简单的解决方案,但作为最后的手段,请尝试将您的 Excel 文件保存为 CSV 文本文件,然后使用常规文件和字符串操作类而不是 JET 引擎来处理它。

    【讨论】:

    • 以这种方式结束 - 现在我通过 C# 打开 Excel 文件,将其保存为 CSV,然后对其进行解析。谢谢大家
    • 这是解决方案吗?严重地?真是太棒了;一文不值,一文不值的excel电子表格。对于如此流行的格式,将数据从中读取到应用程序中几乎是不可能的。到目前为止,还没有维护良好、开源、功能齐全的 API 用于读取 xlsx 电子表格,而这些 JET 和 ACE 引擎就是这样的黑客(通过查看前 X 行来猜测字段类型,将字段截断为 255 个字符,更改选项所需的注册表黑客,某些功能需要安装 excel,在 excel 中打开的文件会更改行为等)。开什么玩笑!
    • @Triynko:我完全同意这是一个笑话,遗憾的是这对我们开发人员来说是个笑话:(这些事情让我开始考虑从 MS 转移到其他原因,毕竟这证明了MS不在乎:(
    • @Triynko 即使在 2012 年,仍然面临这个问题
    • 在 2013 年,同样的事情。面临同样的问题。注册表破解无效。 stackoverflow.com/questions/14637474/…
    【解决方案3】:

    因为我找不到所需的确切答案,所以我将把它留在这里,以防它对任何人有所帮助。

    HKEY_LOCAL_MACHINE ► Software ► Wow6432Node ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines
    
    TypeGuessRows = 0
    

    Source

    【讨论】:

      【解决方案4】:

      通常最好导入到现有表中。通过代码创建一个合适的表并不难。

      【讨论】:

      • 那些255长度和类型猜测的问题消失了吗?你能提供一些工作样本吗?
      • 如果导入到Access中已有的表中,类型已经在Access中设置好了,所以长文本应该设置备忘录类型,消除255问题,其他字段(列)应该设置相关类型,消除猜测。也可以更改注册表以消除猜测。
      • 这对你有用还是你只是在猜测(“应该”并不能说服我)?你也不能“改变注册表来消除猜测”,你可以让猜测更可靠,但不能100%消除。
      • 有关注册表设置,请参见 support.microsoft.com/kb/194124。我是从以前的经验说的。据我所知,在 2007 版之后问题就少了。
      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      相关资源
      最近更新 更多