将excel数据导入到datagridview中

datagridview表头我已经在winfrom中设置好了,然后exce的第一行为了填写数据方便依然写的有表头。constr="Provider=Microsoft.J... datagridview表头我已经在winfrom中设置好了,然后exce的第一行为了填写数据方便依然写的有表头。
constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";

导入后表头依然有呀,如上图。应该如何设置呀
展开
 我来答
一点设计演示
高粉答主

推荐于2018-03-28 · 职场/教育各类模板,衷于原创
一点设计演示
采纳数:874 获赞数:83615

向TA提问 私信TA
展开全部

借助于SQL。代码如下:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
using System.Diagnostics;  
using System.IO;  
//using Microsoft.Office.Interop.Excel;  
using System.Data.OleDb;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
  
namespace ClothingSales_0._5  
{  
    public class Import  
    {  
        //private string fileName;  
  
        /// <summary>  
        /// 将DataGridView中数据导入到Excel  
        /// </summary>  
        /// <param name="dgv">DataGridView的名称</param>  
        public bool getExcel(DataGridView dgv,Label lbl)  
        {  
            bool fflag = true;  
  
            OpenFileDialog open = new OpenFileDialog();  
            open.Title = "请选择要导入的Excel文件";  
            open.Filter = "Excel文件(*.xls)|*.xls";  
  
            if (open.ShowDialog() == DialogResult.OK)  
            {  
                string fileName = open.FileName;  
                //根据路径打开一个Excel文件并将数据填充到DataSet中  
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + fileName + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入  
                OleDbConnection conn = new OleDbConnection(strConn);  
                conn.Open();  
                string strExcel = "select  * from   [sheet1$]";  
                OleDbDataAdapter comm = new OleDbDataAdapter(strExcel, strConn);  
                DataSet ds = new DataSet();  
                try  
                {  
                    comm.Fill(ds, "table1");  
                }  
                catch  
                {  
                    MessageBox.Show("错误信息:009", "错误");  
                }  
                comm.Fill(ds, "table1");  
  
                //根据DataGridView的列构造一个新的DataTable  
                DataTable dt = new DataTable();  
                DataTable dt2 = new DataTable();  
                foreach (DataGridViewColumn dgvc in dgv.Columns)  
                {  
                    if (dgvc.Visible)  
                    {  
  
                        DataColumn dc = new DataColumn();  
                        dc.ColumnName = dgvc.DataPropertyName;  
                        dt.Columns.Add(dc);  
                        DataColumn dc2 = new DataColumn();  
                        dc2.ColumnName = dgvc.DataPropertyName;  
                        dt2.Columns.Add(dc2);  
  
                        if (dgvc.CellType == typeof(DataGridViewCheckBoxCell))  
                        {  
                            dc2.DataType = Type.GetType("System.Boolean");  
                        }  
                    }  
                }  
  
                //根据Excel的行逐一对上面构造的DataTable的列进行赋值  
                foreach (DataRow excelRow in ds.Tables[0].Rows)  
                {  
                    int i = 0;  
                    DataRow dr = dt.NewRow();  
                    foreach (DataColumn dc in dt.Columns)  
                    {  
                        dr[dc] = excelRow[i];  
                        i++;  
                    }  
                    dt.Rows.Add(dr);  
                }  
  
                //判断Excel的格式是否正确  
                int n = 0;  
                for (int j = 0; j < dt.Columns.Count; j++)  
                {  
                    bool flag = false;  
                    for (int k = n; k < dgv.ColumnCount; k++)  
                    {  
                        if (dgv.Columns[k].Visible)  //隐藏的列  
                        {  
                            if (dgv.Columns[k].HeaderText.Trim().ToString() == dt.Rows[0][j].ToString())  
                            {  
                                if (dgv.Columns[k].CellType == typeof(DataGridViewCheckBoxCell))  
                                {  
                                    //list.Add(j);  
                                    //num++;  
                                }  
                                flag = true;  
                                n = k + 1;  
                                break;  
                            }  
                        }  
                    }  
                    if (flag == false)  
                    {  
                        MessageBox.Show("导入的Excel的格式错误", "提示");  
                        fflag = false;  
                        return fflag;  
                    }  
                }  
  
                //删除多余的行  
                int rowCount = (dt.Rows.Count) / 2;  
  
                for (int i = 0; i <= rowCount; i++)  
                {  
                    dt.Rows.RemoveAt(0);  
                }  
  
                //处理Boolean类型的数据  
                for (int i = 0; i < dt.Rows.Count; i++)  
                {  
                    DataRow dr = dt2.NewRow();  
                    for (int j = 0; j < dt.Columns.Count; j++)  
                    {  
                        try  
                        {  
                            dr[j] = dt.Rows[i][j];  
                        }  
                        catch  
                        {  
                            dr[j] = false;  
                        }  
                    }  
                    dt2.Rows.Add(dr);  
                }  
  
                //导入到dataGridView  
                dgv.DataSource = dt2;  
  
                lbl.Text = dgv.RowCount.ToString();  
            }  
            else  
            {  
                fflag = false;  
            }  
            return fflag;  
        }  
    }  
}
吾大和过猫19
推荐于2016-10-04
知道答主
回答量:13
采纳率:0%
帮助的人:2.9万
展开全部
给你个方法 你调用就可以了

public DataTable ExcelToDataTable(string pathName, string sheetName)
{
DataTable tbContainer = new DataTable();
string strConn = string.Empty;
try
{
FileInfo file = new FileInfo(pathName);
if (!file.Exists)
{
throw new Exception("文件不存在");
}
string extension = file.Extension;
switch (extension)
{
case ".xls":
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
case ".xlsx":
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
break;
default:
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
}

OleDbConnection connxls = new OleDbConnection(strConn);
connxls.Open();
DataTable dtExcelSchema = connxls.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string sheetname = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();//获取表名
connxls.Close();
OleDbDataAdapter oda = new OleDbDataAdapter(string.Format("select * from [{0}]", sheetname), connxls);

DataSet ds = new DataSet();
oda.Fill(tbContainer);
return tbContainer;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return tbContainer;
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guuxy
2015-02-05
知道答主
回答量:2
采纳率:0%
帮助的人:2533
展开全部
你是要连EXCEL的表头一起导入吗?
追问
表头我已经在程序里面设置好了。只是在excel里面第一行还是表头。我想导入excel数据到datagridview,如果我把程序里面写好的datagridview的表头都删除是个空的datagridview刚好导入成功。现在我在表头我已经在程序里面设置好了。需要怎么设置才能呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式