解决方案 »

  1.   

    我不用 npoi。
    Excel的编程模型都是一致的,所以你可以去 Excel-Home 之类的论坛去先学习 vba for excel 编程,用excel自身“录制宏”,然后再学习使用其他开发平台操作它。对于使用 .net 框架内置的原生 Excel 对象框架来说,你应该首先选择行结束,然后再读取。例如var st = workbook.Worksheets["我的工作表"];
    var start = st.Range["A12"];
    var end = start.End[excel.XlDirection.xlDown];
    var datas = (object[,])st.Range[start, end].Value2;
    这样就把一列数据读入一个 object[,] 数组中。再比如说写var maxN = worksheet.Range["A1"].End[excel.XlDirection.xlDown].Row;
    这就找到 A1 下边的数据结束行。
      

  2.   

    读取excel文件数据到数据库问题
    //连接数据库
     public OleDbConnection CreateCon()
        {
            string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Server.MapPath("UserScore.mdb") + ";User Id=admin;Password=;";
            OleDbConnection odbc = new OleDbConnection(strconn);
            return odbc;
        }
    //显示excel文件数据
    protected void Button2_Click(object sender, EventArgs e)
        {
            string sqlstr = "select * from Score";
            OleDbConnection conn = CreateCon();
            conn.Open();
            OleDbCommand mycom = new OleDbCommand(sqlstr, conn);
            OleDbDataReader dr = mycom.ExecuteReader();
            dr.Read();
            if (dr.HasRows)
            {
                GetDataSet(sqlstr);
            }
            else
            {
                Label1.Visible = true;
                Label1.Text = "<script language=javascript>alert('数据库中没有数据信息,请先导入再查询!');location='ExcelToAccess.aspx';</script>";
            }
            dr.Close();
            conn.Close();
        }
    //将excel文件数据导入到Aceess数据库并绑定控件示例
     protected void ExcelToAccess_Click(object sender, EventArgs e)
        {
            //定义Excel列表
            string StyleSheet = "Sheet1";
            //调用自定义LoadData方法,将Excel文件中数据读到ASPNET页面中
            LoadData(StyleSheet);
            //定义查询的SQL语句
            string sql = "select ID,用户姓名,试卷,成绩,考试时间 from Score";
            //创建Oledb数据库连接
            OleDbConnection con = CreateCon();
            con.Open();//打开数据库连接
            OleDbCommand com = new OleDbCommand(sql, con);
            //开始事务
            OleDbTransaction tran = con.BeginTransaction();
            com.Transaction = tran;
            //创建适配器
            OleDbDataAdapter da = new OleDbDataAdapter(com);
            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
            //创建DataSet数据集
            DataSet ds = new DataSet();
            //填充数据集
            da.Fill(ds);
            int curIndex = 0;
            if (ds.Tables[0].Rows.Count > 0)
            {
                curIndex = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
            }
            //创建一个内存表
            DataTable tb = this.getExcelDate();
            string selsql = "";
            for (int i = 0; i < tb.Rows.Count; i++)
            {
                string UserName = tb.Rows[i][0].ToString();
                selsql = "select count(*) from Score where 用户姓名='" + UserName + "'";
            }
            //判断Excel文件中是否已经导入到Access数据库中
            if (ExScalar(selsql) > 0)
            {
                Label1.Visible = true;
                Label1.Text = "<script language=javascript>alert('该Excle中的数据已经导入数据库中!');location='ExcelToAccess.aspx';</script>";
            }
            else
            {
                //循环读取Excel文件中数据,并添加到Access事先创建好的数据库表中
                for (int i = 0; i < tb.Rows.Count; i++)
                {
                    DataRow dr = ds.Tables[0].NewRow();
                    dr[0] = ++curIndex;
                    dr[1] = tb.Rows[i][0];
                    dr[2] = tb.Rows[i][1];
                    dr[3] = tb.Rows[i][2];
                    dr[4] = tb.Rows[i][3];
                    ds.Tables[0].Rows.Add(dr);
                }
                try
                {
                    da.Update(ds);//执行插入操作
                    tran.Commit();//事务提交
                    Label1.Visible = true;
                    Label1.Text = "<script language=javascript>alert('数据导入成功!');location='ExcelToAccess.aspx';</script>";
                }
                catch
                {
                    tran.Rollback();//事务回滚
                    Label1.Visible = true;
                    Label1.Text = "<script language=javascript>alert('数据导入失败!');location='ExcelToAccess.aspx';</script>";
                }
                finally
                {
                    con.Close();//关闭数据库连接
                }
            }
        }
      

  3.   

    空行,读取出来,在filter一下,把空行过滤掉