【问题标题】:Import numbers with leading zeroes from excel with ACE.OLEDB使用 ACE.OLEDB 从 excel 导入带前导零的数字
【发布时间】:2016-04-25 21:48:35
【问题描述】:

我有一个程序,用户可以在其中选择一个 Excel 电子表格。然后,该程序使用 OLE.DB 从该 excel 文件中读取数据,并将该数据存储到 DataTable 中。我的问题是,当我从带有前导零的 excel 电子表格中导入条形码时,它们会被修剪。我的列被格式化为文本。以下是我的代码:

    public DataTable GetExcelInfo(string filepath)
    {
        DataTable datatab = new DataTable();
        try
        {
            string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\";
            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                OleDbDataAdapter adapt = new OleDbDataAdapter("SELECT Format([F1], \"#\"), [F2], [F3] FROM [Sheet1$]", conn);
                adapt.Fill(datatab);
            }
        }
        catch (Exception e)
        {
            ErrorReporting.File(e, "GetExcelInfo");
        }
        return datatab;
    }

【问题讨论】:

  • 为什么不使用OleDbDataReader 而不是OleDbDataAdapter?这样,您可以在从 excel 读取时控制每一列的内容。

标签: c# .net excel


【解决方案1】:

对于具有感知字符串但以数字开头的字段,应以撇号 ' 开头。

'0001230056709

类似日期字段的规则相同,如发票号11/16/03

长的“假数字”不仅可以从头开始切割,还可以四舍五入为双等...

【讨论】:

  • 是的,发现很多人建议这样做,但不幸的是,我们的客户从供应商那里获取电子表格,他们根本不允许修改它。我最终使用了 Nino 的建议,但感谢您的回复
  • 撇号可以通过多种方式添加,尝试(免责声明!未经测试) OleDbDataAdapter adapt = new OleDbDataAdapter("SELECT Format("'"+[F1], \"#\"), [F2 ], [F3] FROM [Sheet1$]", conn);或在 XLS 文件中替换(用正则表达式)......我做了很多次这样的更正来代替提供者
  • 我在发帖之前尝试过这样做,但没有奏效,虽然有一个很好的改变,但我在语法上犯了一个错误。
【解决方案2】:

由于Nino 的评论和Jacek Cz 的回答都有助于解决我的问题,所以我做了这个回答来总结一下。

-- 一般情况下,excel 中前导零的数字应以撇号' 开头。

-- 与日期类似的字段的规则相同,例如发票号11/16/03

-- 可以通过多种方式添加撇号,尝试(免责声明!未测试) OleDbDataAdapter adapt = new OleDbDataAdapter("SELECT Format("'"+[F1], \"#\"), [F2], [ F3] 来自 [Sheet1$]",conn);或在 XLS 文件中替换(用正则表达式)。

-- 处理从文件中检索的数据的一种更简单的方法是使用OleDbDataReader 而不是OleDbDataAdapter,您可以在其中指定例如要检索的数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2010-09-13
    • 2014-06-07
    • 2017-01-03
    相关资源
    最近更新 更多