qq_36047627 2016-09-22 11:12 采纳率: 0%
浏览 1855

求网友 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条回答 默认 最新

  • Zedee 2016-09-22 12: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);
        }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题