【问题标题】:Excel to DataTable Error in c#c#中的Excel到DataTable错误
【发布时间】:2012-03-17 13:05:10
【问题描述】:

我有一个奇怪的问题,
当我尝试打开 Excel 数据并将其加载到 DataTable 时,
excel工作表中的一些数据加载,但一些数据没有加载,
有什么问题,
你能帮帮我吗。
我添加了 GetExcelData 函数,
请看这段代码,
请告诉我有什么问题。

GROUP      CLASS       TYPE      C1       C2       C3       C4      C4       C5
M1         10          A         D        B        D        A       A        D
M1         10          B         C        D        E        E       D        D
M2         11          A         D        D        D        D       D        E
M2         11          B         C        D        E        D       E        A

上面我放了样张。
它只复制 GROUP、CLASS 和 TYPE 列中的数据。
但奇怪的是在一些excel文件中不会出现这个错误,
我没有找到答案,决定在这里问。

public DataTable GetExcelData(string fileName, string sheetName)
    {
        string sql = "";
        OleDbConnection conn = new OleDbConnection();
        OleDbCommand command;
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        DataTable dt = new DataTable();
        command = conn.CreateCommand();
        string excel_file = fileName;
        string excel_type = System.IO.Path.GetExtension(excel_file);
        string connstr = ""; 

        if(excel_type=="XLSX")
            connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0";
        else
            connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +fileName + ";Extended Properties='Excel 12.0;IMEX=1; HDR=YES'";

        conn.ConnectionString = connstr;
        sql = "SELECT * FROM [" + sheetName + "$]";

        command.CommandText = sql;
        adapter.SelectCommand = command;
        adapter.Fill(dt);

        return dt;
    }

【问题讨论】:

  • 请添加更多关于哪些数据加载和哪些不加载的信息,我们还需要知道 excel 工作表的内容,至少是数据类型
  • 您不需要交换两个连接字符串吗?您正在使用 Excel 8.0 处理 .xlsx 文件,(我相信)应该是这样的。
  • @xxbbcc: 一开始我也这么认为,但代码会起作用,因为对GetExtension()的调用将返回“.xlsx”而不是“XLSX”,这意味着正确的连接字符串将不经意间被选中。所以它起作用了,但是出于错误的原因。

标签: c# excel datatable


【解决方案1】:

自从你的第一个连接字符串

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0";

没有 IMEX=1 它将无法导入混合类型的列,它只是有时因为您的 if 子句而发生。与 HDR 相同,在 1 种情况下 HDR 丢失。如果条件应该是你的连接字符串,

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    相关资源
    最近更新 更多