如何导入不规则Excel数据

来源:互联网 发布:linux svn上传新项目 编辑:程序博客网 时间:2024/05/01 12:09

如何导入不规则Excel数据(比如单元格的合并,导入到sql数据库中,那么只有相关信息的第一行才显示数据,其他几行都空白)。
首先:先按正常导入方式导入。
2、在数据库里更新(比如单元格的合并产生的问题填充)
3、转换日期格式(如日期填充天数为3-8,6-15,8-20)

********************************************************************************************************
1、如何导入Excel数据

 /// <summary>
   /// //先把它的文件上传到服务器来,然后再导入到你的数据库,这样就没有权限的问题了
   /// </summary>
  /// <param name="FileSource"></param>
  /// <param name="StyleSheet"></param>
  
  //string fileName=Server.MapPath("")+"//upload"+"//test.xls";
  //myFile.PostedFile.SaveAs(fileName);
  public void LoadData(string FileSource,string StyleSheet)
  {

   string strCon ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + @FileSource + ";Extended Properties=Excel 8.0";
   OleDbConnection myConn = new OleDbConnection(strCon);
   myConn.Open(); //打开数据链接,得到一个数据集
   DataSet myDataSet = new DataSet(); //得到自己的DataSet对象
   string StrSql="select *  from ["+StyleSheet+"$]";
   OleDbDataAdapter myCommand = new OleDbDataAdapter(StrSql,myConn); //创建一个 DataSet对象
   myCommand.Fill(myDataSet,"["+StyleSheet+"$]");
   myCommand.Dispose();
   DataTable DT=myDataSet.Tables["["+StyleSheet+"$]"];
   myConn.Close();
   myCommand.Dispose();

  
   conn.Close();
   conn.Open();  
   string sql="delete   from TEST";
   SqlCommand comm=new SqlCommand(sql,conn);
   comm.ExecuteNonQuery();
   comm.Dispose();
   try
   {
    for(int j=1;j<DT.Rows.Count;j++)
    {
     string ID=DT.Rows[j][0].ToString(); 
     if (ID =="")
     {
     }
     else
     {
      string AUTHOR=DT.Rows[j][1].ToString();
      string NAME=DT.Rows[j][2].ToString();
      string PRICE=DT.Rows[j][3].ToString();
      string strSql="insert into TEST(ID,AUTHOR,NAME,PRICE) ";
      strSql=strSql + "values('"+ID+"','"+AUTHOR+"','"+NAME+"','"+PRICE+"')";
      comm=new SqlCommand(strSql,conn);
      comm.ExecuteNonQuery();
      if (j==DT.Rows.Count-1)
      {
       Label1.Visible=true;
      }
     }                   
    }
    conn.Close();
   }
   catch(Exception exc)
   {
    conn.Close();
    string s = exc.ToString();
    return;
   } 
   
  }

调用
private void Button1_Click(object sender, System.EventArgs e)
{
      string a="d:/x.xls";
   string b="Sheet1";
   LoadData(a,b);
}

**************************************************************************************
2、转换合并单元格引起的字段内容空白问题,如“author”作者列是部分空白。
private void Button2_Click(object sender, System.EventArgs e)
{
  try
    {
 conn.Open(); 
 string  SQL="Select  ID,(Case When IsNull(AUTHOR, '') = '' Then (Select TOP 1 AUTHOR From Test Where ID < A.ID And IsNull(AUTHOR, '') != '' Order By ID Desc) Else AUTHOR End) As AUTHOR, NAME,PRICE   From Test A";
 DataTable dt=Connect.BindTable(SQL);
 if(dt.Rows.Count != 0)
   { 
     string sql="Update  A  Set  AUTHOR = (Select TOP 1 AUTHOR From Test Where ID < A.ID And IsNull(AUTHOR, '') != '' Order By ID Desc)  From Test A   where  IsNull(AUTHOR, '') = ''";
     SqlCommand myCmd=new  SqlCommand(sql,conn);       
     myCmd.ExecuteNonQuery();             
    }    
    conn.Close();
   }
catch(Exception exc)
  {
 conn.Close();
 string s = exc.ToString();
 return;
   } 
}

**********************************************************************************************

3、转换日期格式,并插入新表保留完整数据(如日期填充天数为3-8,6-15,8-20)
                   try
   {
    conn.Close();  
    conn.Open();  
    string sql="delete   from NEW";    //先删除NEW数据表中的数据,然后再插入,实际操作的时候可以限制条件,比如年份,月份等.
    SqlCommand comm=new SqlCommand(sql,conn);
    comm.ExecuteNonQuery();
    comm.Dispose();    
   
    DataTable dt=Connect.BindTable( "select *  from test order by ID");
    if(dt.Rows.Count != 0)
    {
     for(int i=0;i< dt.Rows.Count;i++)
     {
      
      string ID=dt.Rows[i][0].ToString();
      string AUTHOR=dt.Rows[i][1].ToString();
      string NAME=dt.Rows[i][2].ToString(); 
      string PRICE=dt.Rows[i][3].ToString();
      
           string[] mystr=NAME.Split('-');
       int a=int.Parse(mystr[0]);
       int b=int.Parse(mystr[1]);         
       for(int j=a;j<=b;j++)
       {
          string strSql="insert into NEW(ID,AUTHOR,NAME,PRICE) ";
          string  x=this.DropDownList1.SelectedValue+"-"+this.DropDownList2.SelectedValue+"-" + j.ToString();
        strSql=strSql + "values('"+ID+"','"+AUTHOR+"','"+x+"','"+PRICE+"')";
        comm=new SqlCommand(strSql,conn);
           comm.ExecuteNonQuery();
       }
                     
     }
     conn.Close();
    }
   }
   catch(Exception exc)
   {
    conn.Close();
    string s = exc.ToString();
    return;
   }

*****************************************************************************************************************
导入结束。
 

原创粉丝点击