2 qq 36047627 qq_36047627 于 2016.09.22 19:12 提问

求网友 excel导入datagridview时 中出现很多多余的空行 怎么办?

图片说明

    public void EcxelToDataGridView(string filePath, DataGridView dgv)
    {
        //根据路径打开一个Excel文件并将数据填充到DataSet中
        string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入
        OleDbConnection conn = new OleDbConnection(strConn);       //创建数据源连接对象,并实例化
        conn.Open();  //打开数据源连接
        string strExcel = "";      //表示从Excel文件获取数据所在栏
        OleDbDataAdapter myCommand = null;   //表示一个数据连接,用于获取导入文件数据
        DataSet ds = null;       //开辟一块内存,用于存储导入文件数据
        strExcel = "select  * from   [sheet1$]";
        myCommand = new OleDbDataAdapter(strExcel, strConn);
        ds = new DataSet();
        myCommand.Fill(ds, "table1");

        //根据DataGridView的列构造一个新的DataTable
        DataTable tb = new DataTable();
        //逐列或许数据表格中DataGridView控件各列
        foreach (DataGridViewColumn dgvc in dgv.Columns)
        {
            if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
            {
                DataColumn dc = new DataColumn();
                dc.ColumnName = dgvc.DataPropertyName;
                //dc.DataType = dgvc.ValueType;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTable
                tb.Columns.Add(dc);
            }
        }
        //根据Excel的行逐一对上面构造的DataTable的列进行赋值
        foreach (DataRow excelRow in ds.Tables[0].Rows)
        {
            int i = 0;
            DataRow dr = tb.NewRow();
            foreach (DataColumn dc in tb.Columns)
            {
                dr[dc] = excelRow[i];
                i++;
            }
            tb.Rows.Add(dr);
        }
        //在DataGridView中显示导入的数据
        //dgv.Columns.Clear();
        //dgv.  = tb;
        for (int curRow = 1; curRow < tb.Rows.Count; curRow++)
        {
            dgv.Rows.Add(1);
            for (int curCol = 0; curCol < tb.Columns.Count; curCol++)
            {

                dgv.Rows[curRow - 1].Cells[curCol].Value = tb.Rows[curRow][curCol].ToString();
            }
        }


    }



    private void button2_Click(object sender, EventArgs e)
    {



        //打开一个文件选择框
        OpenFileDialog ofd = new OpenFileDialog();


        //为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
        ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        ofd.Filter = "Excel文件(*.xls)|*.xls";      //使导入文件格式为03版Excel文件
        //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
        ofd.ValidateNames = true;
        ofd.CheckFileExists = true;  //验证路径有效性
        string strName = string.Empty;       //用来储存导入文件的文件名

        if (ofd.ShowDialog() == DialogResult.OK)        //判断是否存在导入文件
        {
            strName = ofd.FileName;
        }
             if (strName == "")
            {
                //如果没有选择导入文件,进行提示,退出当前操作。
                MessageBox.Show("没有选择Excel文件!无法进行数据导入");
                return;
            }
            //调用导入数据方法
        EcxelToDataGridView(strName, dataGridView1);
    }

1个回答

seeze
seeze   2016.09.22 20:23

//根据Excel的行逐一对上面构造的DataTable的列进行赋值
foreach (DataRow excelRow in ds.Tables[0].Rows)
{
int i = 0;
DataRow dr = tb.NewRow();
foreach (DataColumn dc in tb.Columns)
{
//在这里对excelRow[i]进行空值判断

            dr[dc] = excelRow[i];
            i++;
        }
        tb.Rows.Add(dr);
    }
seeze
seeze 回帖格式没弄好
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片