Excel、OleDb 和前导零
Posted
技术标签:
【中文标题】Excel、OleDb 和前导零【英文标题】:Excel, OleDb, and Leading zeros 【发布时间】:2009-01-13 06:10:01 【问题描述】:我有一个使用 OleDb 将数据从 excel 文件读取到 DataSet 的过程。一切都运行良好,直到我开始看到其中包含前导 0 的数据。文本格式为常规或文本。
我在 OleDb 连接中设置了 IMEX=1,但我仍然在数据集中为每个前导 0 的条目获得一个空值。
有没有人知道解决这个问题的方法?
编辑
作为附加信息,我必须保留前导 0,并且该列的格式为 General。我也试过文字。
具有前导零的第一个条目位于第 11 行,并返回空值。此特定工作表上的所有其他数据都是此列的数字。
【问题讨论】:
Excel 和前导零是一场巨大的灾难 【参考方案1】:我敢打赌,数据以文本形式存储在 Excel 电子表格中;因为它本身不会有前导零(尽管可以对单元格进行格式化以显示它们。)我希望 OleDb 会询问 Excel 什么数据类型,而 Excel 认为它们是字符串。
查看其中一个 Excel 单元格,看看它在顶部的数据输入条中是否有加载零;还是它有一个领先的撇号或类似的?
如果是这种情况(或者即使不是,但您想要未格式化的数据),我想到的一种方法是将工作表复制到另一个工作表并使用 Val(address) 转换 Excel 列函数,并在没有前导零的情况下重新格式化它;然后从中读取。
【讨论】:
我无法删除前导零。数据显示 0 作为单元格中的第一个字符,没有撇号。 那如何添加一列,将公式设置为 Val(badcolumn)?【参考方案2】:我能看到的最好的事情是,您必须创建一个预先格式化的 excel 文件,然后将其用于您需要的数据。
【讨论】:
列的类型已设置为文本。除非我需要删除并重新粘贴数据。【参考方案3】:您的前 10 行是纯数字数据吗?
然后驱动程序正在判断整列是否为数字。当它遇到不适合的数据时,它会窒息。您可能将其视为 NULL 或 0。
我会尝试: 1) 删除 IMEX - 在没有它的情况下进行实验 2) 尝试将单引号作为第一个字符添加到该列中的所有数据。 这在 Excel 中“强制文本”。作为测试,只需在前 11 行尝试一下即可。 这应该强制驱动程序将列视为文本。 NULL 应该消失。
有一些方法可以增加行“样本大小”...但我不记得在连接字符串中使用的关键字。
【讨论】:
如果您知道更改连接中样本大小的方法,那就太棒了。我发现的唯一一个引用了注册表项,这对我不起作用。以上是关于Excel、OleDb 和前导零的主要内容,如果未能解决你的问题,请参考以下文章
OLEDB 12.0 连接与 Excel 2010 和 Excel 2013 兼容
通过 C# 和 OleDb 在 Excel 电子表格中插入一行
Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别