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的区别

使用 OLEDB 从 Excel 中读取数据

如何使用 oledb 在 c# 中将下拉列数据插入到 excel 中

如何在使用 Oledb 的其他用户使用时读取 excel?