用excel 导入导出数据

 /// <summary>
        /// .xls导入数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDaoRu_Click(object sender, EventArgs e)
        {
            // Flag("DelPurview&0", "EnterLibPos");

             if (string.IsNullOrEmpty(FileUpload1.FileName)) 
            {
                JScriptUtil.AlertAndRedirect("请选择导入文件!", "index.aspx");
            }

             string sFileName = FileUpload1.FileName; //文件的名字

            if (sFileName.Substring(sFileName.Length - 4, 4).ToLower()!=".xls") 
            {
                JScriptUtil.AlertAndRedirect("格式不支持!", "index.aspx");
                return;
            }

            //文件保存的路径
            string sFilePath = HttpContext.Current.Server.MapPath("~/") + "excel\\" + sFileName;

            FileUpload1.PostedFile.SaveAs(sFilePath);
            if (!File.Exists(sFilePath))
            {
                JScriptUtil.AlertAndRedirect("文件上传不成功!", "index.aspx");
            }

            string sErrorMsg = string.Empty; //错误信息

            //从Excel获取到的DataSet数据
            DataSet dsBookExcel = ExcelUtil.GetDataSetByPath(sFilePath, ref sErrorMsg);

            //此时出错了
            if (sErrorMsg.Length > 0) 
            {
                JScriptUtil.AlertAndRedirect(sErrorMsg, "index.aspx");
            }

            foreach (DataTable dtItem in dsBookExcel.Tables)
            {
               
                if (!dtItem.Columns.Contains("第三空间ID") || dtItem.Rows.Count == 0)
                {   
                    continue;
                }
                foreach (DataRow drItem in dtItem.Rows)
                {
                    InsertData(drItem);
                }
            }
            bind_data();
            JScriptUtil.AlertAndRedirect("导入完成", "index.aspx");
        
        }

/// <summary>         /// 通过路径获取DataSet         /// </summary>         /// <param name="strFileName"> 文件路径 </param>         /// <param name="strErrorMsg"> 错误信息 </param>         public static DataSet GetDataSetByPath(string strFileName, ref string strErrorMsg)         {             OleDbConnection OleConn = null;             DataSet dsResult = new DataSet();  // DataSet结果集             try             {                 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFileName + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'";                 OleConn = new OleDbConnection(strConn);                 OleConn.Open();


                //Excel中表的数据                 DataTable dtSheet = OleConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,                     new object[] { null, null, null, "TABLE" });//获取工作簿


                string sql = string.Empty; // 查询语句


                foreach (DataRow item in dtSheet.Rows)                 {                     if (item[2].ToString().Contains("FilterDatabase")) continue; // 过滤掉重复的数据                     sql = string.Format("SELECT * FROM  [{0}]", item[2].ToString());                     OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);                     DataTable dtItem = new DataTable();                     OleDaExcel.Fill(dtItem);                     dtItem.TableName = item[2].ToString();                     dsResult.Tables.Add(dtItem);                     OleDaExcel.Dispose();                     dtItem.Dispose();                 }


            }             catch (Exception err)             {                 strErrorMsg = string.Format("数据绑定Excel失败!失败原因:{0}", err.Message);                 return null;             }             finally             {                 OleConn.Close();             }             return dsResult;         }

 
   /// <summary>
        /// 导出数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDaochu_Click(object sender, EventArgs e)
        {
            string sql = "select a.*,b.Name,b.Address,b.Tel,b.OpenTime,b.AreaId from dbo.bz_EnterpriseLibaryPos as a left join dbo.bz_EnterpriseLibrary as b on a.EnterpriseLibaryId=b.EnterpriseLibraryId ";
          
            //得到需要导入Excel的DataTable
            DataTable dt = Common.DBUtility.SqlHelper.ExecuteDataTable(CommandType.Text, sql, null); ;
            CreateExcel(dt, "zuobiao.xls", this.Page);
          
        }

        /// <summary>
        /// 导出xls
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="fileName">文件名(坐标.xls)</param>
        /// <param name="page"></param>
        public static void CreateExcel(DataTable dt, string fileName, Page page)
        {
            HttpResponse resp;
            resp = page.Response;
            resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
            //  HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
            string colHeaders = "", ls_item = "";

            ////定义表对象与行对象,同时用DataSet对其值进行初始化
            //DataTable dt = ds.Tables[0];
            DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
            int i = 0;
            int cl = dt.Columns.Count;

            //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
            for (i = 0; i < cl-1; i++)
            {
                if (i == (cl - 2))//最后一列,加n,不是AreaId列
                {
                   // colHeaders += dt.Columns[i].Caption.ToString() + "\n";
                    colHeaders += "开放时间" + "\n";
                }
                else
                {
                   // colHeaders += dt.Columns[i].Caption.ToString() + "\t";
                    switch (dt.Columns[i].Caption.ToString())
                    {
                        case "EnterpriseLibaryPosId": colHeaders += "序号" + "\t"; break;
                        case "EnterpriseLibaryId": colHeaders += "第三空间ID" + "\t";break ;
                        case "Position": colHeaders += "坐标" + "\t"; break;
                        case "Name": colHeaders += "名称" + "\t"; break;
                        case "Address": colHeaders += "地址" + "\t"; break;
                        case "Tel": colHeaders += "电话" + "\t"; break;

                        default: return;
                    }
                }

            }
            resp.Write(colHeaders);
            //向HTTP输出流中写入取得的数据信息

            //逐行处理数据 
            foreach (DataRow row in myRow)
            {
                //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据   
                for (i = 0; i < cl-1; i++)
                {
                    if (i == (cl - 2))//最后一列,加n
                    {
                        ls_item += row[i].ToString() + "\n";
                    }
                    else
                    {
                        if (i == 4)
                        {
                            string addr = AreaBLL.GetArea(Convert.ToInt32(row[7])) + row[i].ToString();
                            ls_item += addr + "\t";
                        }
                        else
                        {
                            ls_item += row[i].ToString() + "\t";
                        }
                    }

                }
                resp.Write(ls_item);
                ls_item = "";
            }
            dt.Clear();
            resp.End();
        }

 

posted @ 2013-07-30 18:03  nik2011  阅读(299)  评论(0编辑  收藏  举报