将多个excel文件中的数据导入datagridview

时间:2018-02-09 15:00:45

标签: c# excel datagridview

我正在获取特定目录中的excel文件列表,如下所示

    public void GetFilesList()
    {
        ListFiles = Directory.GetFiles(DefaultDirectory, "*.xlsx", SearchOption.AllDirectories);

        foreach (string FilePath in ListFiles)
        {
            ImportExcel(FilePath);
        }
    }

然后我尝试将该目录中每个文件的行添加到我的datagridview中,如下所示

    public void ImportExcel(string FilePath)
    {
        string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";";
        OleDbConnection Conn = new OleDbConnection(ConnStr);

        OleDbDataAdapter DA = new OleDbDataAdapter("select * from [Sheet1$]", Conn);
        DataTable dt = new DataTable();

        if (dataGridView1.Rows.Count == 0)
        {
            DA.Fill(dt);
            dataGridView1.DataSource = dt;
            //Calculate record counts
            L_Total_Rows.Text = "count: " + dataGridView1.Rows.Count.ToString("n0");
            Conn.Close();
        }
        else
        {
            foreach (DataRow dr in dt.Rows)
            {
                dataGridView1.Rows.Add(dr);
                dataGridView1.DataSource = dt;
            }
        }
    }

我的问题是它只导入行一个excel文件 它不会进入其他条件它只进入if条件然后停止导入

另外一个问题是不要在查询[Sheet1 $]上使用工作表名称?我不知道纸张索引是否可能?

我可以开始导入excel文件格式特定行,如第四行excel文件吗?

2 个答案:

答案 0 :(得分:2)

如何将结果集首先合并到一个数据表中:

DataTable dt = new DataTable();
using(OleDbDataAdapter a1 = new OleDbDataAdapter("select * from [Sheet1$]", Conn))
a1.Fill(dt);

using(OleDbDataAdapter a2 = new OleDbDataAdapter("select * from [Sheet1$]", Conn))
a2.Fill(dt);

答案 1 :(得分:0)

通过将DataTable dt = new DataTable();移到课程开头来解决问题,因为每次调用ImportExcel(FilePath)方法时,它都会构建新的datatable,因此会删除所有旧数据并创建新的datatable并将我的方法更改为

    public void ImportExcel(string FilePath)
    {
        string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";";

                    OleDbConnection Conn = new OleDbConnection(ConnStr);
        OleDbDataAdapter DA = new OleDbDataAdapter("select * from [Sheet1$]", Conn);

        DA.Fill(dt);
        DGV_Data.DataSource = dt;
        //Calculate record counts
        L_Rows_Count.Text = "Count: " + (DGV_Data.Rows.Count - 1).ToString("n0");
        Conn.Close();

    }

现在有一个小问题仍然让我讨厌,它会在每个导入的Excel文件之间的datagriview处插入一个空行