【问题标题】:Data truncated after 255 bytes while using Microsoft.Ace.Oledb.12.0 provider使用 Microsoft.Ace.Oledb.12.0 提供程序时,数据在 255 个字节后被截断
【发布时间】:2014-09-11 23:07:21
【问题描述】:

我正在使用 ACE 提供程序读取 Excel 表,并且某些单元格包含大于 255 字节的数据。我尝试更改注册表设置中的 TypeGuessRows 以及从连接字符串中进行设置。我仍然在代码中得到截断值。我无法重组 excel 表或使用其他提供商。我运行 64 位窗口。我的office版本是2013。(有点怀疑是不是因为这个)。

这是我的连接字符串;对于那些数据

var connectionString = string.Format("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\"");

有什么解决办法吗?提前致谢。

【问题讨论】:

  • 过去 Excel 被限制为每个单元格 255 个字符,也许这就是根本原因?
  • 您是否尝试删除 ImportMixedTypes=Text 部分?
  • @Steve:是的,我做到了。仍然得到截断的值。
  • 好吧,我已经阅读了您关于不更改 Excel 文件的要求,但只是为了测试,如果您在工作表的开头添加超过 255 个字符的行会发生什么情况?您是否还可以将以下行作为备注字段而不是文本字段读取?
  • 抱歉,我不知道 MEMO 字段是什么。我在第七行有两个相邻的单元格,有超过 255 个字符,从代码中读取时会被截断。显然,我得到的这两个单元格的截断值完全相同(其中包含相同的数据)。

标签: c# .net sql-server excel vba


【解决方案1】:

我还在 64 位 Windows 7 上使用 Microsoft.ACE.OLEDB.12.0

我发现连接字符串中的TypeGuessRows没有效果。

但在以下注册表位置增加TypeGuessRows 有效:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel

More info on a similar bug(尽管您可能已经知道这一点,因为您已经在尝试更改 TypeGuessRows)

【讨论】:

  • 这是正确的64位机改键,感谢您的解决方案aximili!
  • 非常感谢 :) 它适用于 .xls 扩展文件,我从昨天开始就在寻找这个
  • 嗨,你能告诉我.xlsx 扩展文件的步骤吗?
【解决方案2】:

解决方案非常简单。 只需将包含这些庞大数据的列的格式从 excel 表中的“常规”更改为“文本”即可。

现在我觉得自己像个 n00b。

【讨论】:

  • 不知道为什么这被否决了,但这实际上解决了我的问题。我相信可能还需要更改注册表,但在我的情况下,我被限制为 251 个字符,直到我将有问题的列格式化为 TEXT 而不是 GENERAL。
  • 谢谢。有不同的问题 - 一个大的文本字段根本不会显示。将类型更改为 General 使其出现。
【解决方案3】:

问题在于 ACE 驱动程序正在为您从中填充数据集的列推断 TEXT 数据类型。文本列限制为 255 个字符。您需要强制它使用 MEMO 数据类型。

最好的办法是保证该列中前八行中的大部分长度超过 255 个字符。

Source

此行为由 Excel 的预测性质决定 司机/供应商。因为它不知道数据类型是什么,所以它有 根据前几行中的数据进行猜测。如果 字段内容超过 255 个字符,并且在第一个 多行,则数据类型为备忘录,否则为 可能是文本(这将导致截断)。

【讨论】:

  • 消息来源谈到了 Jet 提供商的修复。就我而言,我使用的是 ACE 提供程序。我如何强制使用 MEMO 数据类型?而这个超过 255 个字符的单元格位于第 7 行。此单元格旁边还有另一个单元格,它也有超过 255 个字符。当我将内容插入数据集时,两个单元格的值完全相同;每个被截断为 255 个字符。
  • 该解决方案同时适用于 Jet 和 Ace 提供商。要强制使用备注类型,excel 文件前 8 行中的大部分必须包含超过 255 个字符的值。
【解决方案4】:

Excel 有一些限制。

Excel specifications and limits - 2013

正如您在发布的链接中看到的那样:

功能最大限制 列宽 255 个字符

【讨论】:

    【解决方案5】:

    参考这个链接。我认为这是问题所在(尝试使用备注字段)

    http://allenbrowne.com/ser-63.html

    在 Access 表格中,文本字段限制为 255 个字符,但备注字段可以处理 64,000 个字符(约 8 页单行距文本)

    不错的解决方法:查看this 堆栈答案

    【讨论】:

    • 我的问题更多在这篇文章的行:social.msdn.microsoft.com/Forums/en-US/…,对此似乎没有明确的解决方案。
    • 我已经更新了我的答案,其中包含指向 SO 中另一个答案的链接。让我知道它是否对您有帮助
    • 我使用的是 office 15.0,并且我已经将 TypeGuessRows 的值从 8 更改为 0。但它不起作用。
    • 你把ImportMixedTypes改成Text了吗?
    • 是的,我做到了。如果您注意到连接字符串,我也将其附加到它。
    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多