OA项目之导入

内容显示页:

 protected void btnIMP_Click(object sender, EventArgs e)
        {
            Response.Redirect("导入页.aspx?backurl=" + DESEncrypt.Encrypt(iurl));
        }


aspx:
<head runat="server">
    <title></title>
  <script type="text/javascript" src="../Page/js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="../Page/js/hide_show.js"></script>
    <link href="../Page/css/layout.css" rel="stylesheet" type="text/css" />
    <link href="../Page/css/Dialog.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="../Page/js/jQuery_Dialog.js"></script>
    <script type="text/javascript" src="../Page/js/function.js"></script>
    <script type="text/javascript" src="../Page/js/jquery.easydrag.js"></script>
    <link href="../Page/css/style01.css" rel="stylesheet" type="text/css" />
</head>
<body>
     <form id="form1" runat="server">
    <div class="DivMain">
        <div class="m_nav">
            <%=siteMap %><span>></span><a href="javascript:void(0);">记录信息导入</a>
        </div>
        <!--结束-->
        <div class="clearDiv">
        </div>
        <div class="Search">
            批量导入记录信息模板下载:<a href="../Resources/Template/批量导入记录信息.xls">【批量导入记录信息模板】</a>
        </div>
        <div class="div_right_search">

            <table class="table_search_001" width="600">
                <tr>
                    <td>
                        &nbsp;选择文件:
                        <asp:FileUpload ID="fileUpload" runat="server" CssClass="txt_file" Width="300px" />
                        <asp:Button runat="server" Text="EXCEL导入" ID="btnImp" OnClientClick="return check()"
                            OnClick="btnImp_Click" CssClass="button_sm7" />
                        <asp:Button runat="server" ID="btnBack" CssClass="button_sm1" Text="返回" OnClick="btnBack_Click" />
                    </td>
                </tr>
            </table>
        </div>
        <div class="div_right_search" id="divHandel" runat="server" style="text-align: left;">
            &nbsp;<input type="button" class="button_bg7" onclick="showExcelData('good')" value='显示验证通过' />
            <input type="button" class="button_bg7" onclick="showExcelData('bad')" value='显示验证没通过' />
            <input type="button" class="button_bg7" onclick="showExcelData('all')" value='显示所有' />
            <asp:Button ID="btnImpRight" runat="server" CssClass="button_bg7" Text="导入验证通过" OnClick="btnImpRight_Click"
                OnClientClick="return checkIMP();" />
            <asp:Button ID="btnCancel" runat="server" CssClass="button_sm1" Text="取  消" OnClick="btnCancel_Click" />
        </div>
        <div class='clearDiv'>
        </div>
        <div id="divBadData">
            <%Response.Write(GetBadData()); %>
        </div>
        <div id="divGoodData">
            <%Response.Write(GetGoodData()); %>
        </div>
    </div>
    <!-- 背景层DIV -->
    <div class="div_documentbg" id="div_documentbg">
    </div>
    <script language="javascript" type="text/javascript">
        function check() {
            if ($("#<%=fileUpload.ClientID %>").val() == "") {
                $.dialog.alert("请选择需要上传的EXCEL文件。");

                return false;
            }
            var doc_name = $("#<%=fileUpload.ClientID %>").val();
            var doc_type = doc_name.substring(doc_name.lastIndexOf("\\") + 1).split(".")[1];
            if (doc_type != "xls") {
                $.dialog.alert("请选择后缀名为.xls文件。");
                return false;
            }
            if (confirm("您将要导入记录信息")) {
                SubmitData2(getLoadingDot("正在操作,请稍后"), 600);
                setInterval("$('.tips_jinggao').html(getLoadingDot(\"正在操作,请稍后\"))", 1000);
            }
        }

        function checkIMP() {
            SubmitData2(getLoadingDot("正在操作,请稍后"), 600);
            setInterval("$('.tips_jinggao').html(getLoadingDot(\"正在操作,请稍后\"))", 1000);
        }

        function showExcelData(type) {
            if (type == "good") {
                $("#divBadData").hide();
                $("#divGoodData").show();
            }
            else if (type == "bad") {
                $("#divBadData").show();
                $("#divGoodData").hide();
            }
            else {
                $("#divBadData").show();
                $("#divGoodData").show();
            }
        }
    </script>
    </form>
</body>
</html>

aspx.cs:
 protected string strTempletTitle1 = string.Empty;
 protected string strTemplet = string.Empty;       
 static string strGoodData = string.Empty;
 static string strBadData = string.Empty;
 static DataTable excelData = new DataTable();
 protected string backurl = string.Empty; 
 protected void Page_Load(object sender, EventArgs e)
        {
            strTempletTitle1 = "内容一,内容二";
            strTemplet = string.Empty;
            backurl = Request.QueryString["backurl"];
            if (!IsPostBack)
            {
                strGoodData = string.Empty;
                strBadData = string.Empty;
            }
            ShowHandel();
        } 
 protected void btnImp_Click(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
            string uploadFileName = string.Empty;

            if (fileUpload.HasFile)
            {
                try
                {
                    uploadFileName = fileUpload.FileName;
                    string errorMessage = string.Empty;

                    if (!CheckFileName(fileUpload.FileName, out errorMessage))
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "check", "$.dialog.alert('" + errorMessage + "');", true);
                        return;
                    }
                    DeleteInvoiceFile();
                    string serverPath = Server.MapPath("../Resources/UpFile/");
                    string fileName = serverPath + Guid.NewGuid() + ".xls";
                    if (!Directory.Exists(serverPath))
                    {
                        Directory.CreateDirectory(serverPath);
                    }
                    fileUpload.SaveAs(fileName);
                    OleDbConnection conn;
                    OleDbDataAdapter da;
                    System.Data.DataTable tblSchema;//存放领域表的结构
                    IList<string> tblNames;//sheet名称
                    GetExcelSchema(fileName, out conn, out da, out tblSchema, out tblNames, "YES", 1);
                    if (ds != null) ds.Clear();
                    ds = GetEachSheetContent(conn, ref da, tblSchema, ref tblNames);
                    if (ds.Tables.Count == 0)
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "check", "$.dialog.alert('导入失败,你可能选择了错误的模板,请重新上传。');", true);
                        return;
                    }
                    //验证模板结构
                    strTemplet = strTempletTitle1;
                    if (!CheckUploadDataStructure(ds, strTemplet, out errorMessage))
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "check", "$.dialog.alert('" + errorMessage + "');", true);
                        return;
                    }
                    excelData = new DataTable();
                    excelData = ds.Tables[0];
                    DataColumn dcErr = new DataColumn();
                    dcErr.ColumnName = "ErrorDate";
                    dcErr.DataType = typeof(string);
                    dcErr.Caption = "错误提示";
                    excelData.Columns.Add(dcErr);
                    CheckUploadData();
                }
                catch (Exception ex)
                {
                    Response.Output.WriteLine(ex.Message);
                    Response.Output.WriteLine(ex.StackTrace);
                    Response.End();
                }
            }
            ShowHandel();
        }
        private void ShowHandel()
        {

            if (excelData.Rows.Count == 0)
            {
                divHandel.Visible = false;
            }
            else
            {
                divHandel.Visible = true;
            }

        }

        private void InputExcelDataToDB()
        {
            int exData = 0;
            string strSql = string.Empty;
            List<string> listSql = new List<string>();
            try
            {
                DataRow[] dr = excelData.Select("ErrorDate='正确'");
                if (dr.Count() > 0)
                {
                    strSql = string.Empty;
                    #region 组SQL语句
                    for (int i = 0; i < dr.Count(); i++)
                    {
                        strSql = @"insert into table(字段)";
                     
                        strSql += "VALUES ('" + dr[i]["内容一"].ToString().Trim() + "'";
                        strSql += ",'" + dr[i]["内容二"].ToString().Trim() + "'";
                        listSql.Add(strSql);
                    }
                    #endregion

                    exData = DbHelperSQL.ExecuteSqlTran(listSql);
                    if (exData > 0)
                    {
                        string url = string.IsNullOrEmpty(backurl) ? "内容显示页.aspx" : DESEncrypt.Decrypt(backurl);
                        SYS_LOG.AddCommonLog(pfunction.SysLogQueryMenu(Module_Id), "【批量导入记录管理信息成功】,操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
                        ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataSuccess('【" + exData + "】记录管理信息被成功导入','" + url + "','1');", true);
                    }
                    else
                    {
                        SYS_LOG.AddErrorLog(Request.Url.AbsolutePath, "【批量导入记录信息失败】,操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
                        ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataError('操作失败','','3');", true);
                    }
                }
                else
                {
                    SYS_LOG.AddErrorLog(Request.Url.AbsolutePath, "【批量导入记录信息失败】,操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
                    ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataError('数据为空,导入失败','','3');", true);
                }

            }
            catch (Exception ex)
            {
                SYS_LOG.AddErrorLog(Request.Url.AbsolutePath, "【批量导入记录信息失败】" + ex.Message.ToString().Replace("'", "") + ",操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
                ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataError('操作失败:" + ex.Message.ToString() + "','','3');", true);
            }

            excelData.Clear();

        }
        /// <summary>
        /// 验证导入数据
        /// </summary>
        /// <param name="goodData"></param>
        /// <param name="badData"></param>
        /// <param name="dataAll"></param>
        private void CheckUploadData()
        {
            for (int i = 0; i < excelData.Rows.Count; i++)
            {
                DataRow dr = excelData.Rows[i];
                string strErr = string.Empty;
                CheckOption(dr, out strErr);
                excelData.Rows[i]["ErrorDate"] = strErr;
            }
        }
        /// <summary>
        /// 显示验证通过的数据
        /// </summary>
        /// <returns></returns>
        protected string GetGoodData()
        {
            if (excelData.Rows.Count == 0)
            {
                return "";
            }
            DataRow[] dr = excelData.Select("ErrorDate='正确'");
            if (dr.Count() == 0)
            {
                return "";
            }
            string strAlert = string.Empty;

            if (dr.Count() == excelData.Rows.Count)
            {
                strAlert = "<font color='green'>全部记录信息都已验证通过</font>";
            }
            else
            {
                strAlert = "<font color='yellow'>【" + dr.Count() + "】记录信息验证通过</font>";
            }
            #region
            strGoodData = string.Empty;
            strGoodData += "<div class='clearDiv'></div><div class=\"div_right_listtitle\">";
            strGoodData += "<div style=\"margin-left:15px;font-weight:bold;padding-top:7px;\">" + strAlert + "</div>";
            strGoodData += "</div>";
            strGoodData += "<table class='table_list' cellpadding='0' cellspacing='0' >";
            strGoodData += "<tr class='tr_title'>";
            strGoodData += "<td>内容一</td>";
            strGoodData += "<td>内容二</td>";
            strGoodData += "</tr>";
            for (int i = 0; i < dr.Count(); i++)
            {
                strGoodData += "<tr class='tr_con_001'>";
                strGoodData += "<td>" + dr[i]["内容一"] + "</td>";
                strGoodData += "<td>" + dr[i]["内容二"] + "</td>";
              
                strGoodData += "</tr>";
            }
            strGoodData += "</table>";

            #endregion

            return strGoodData;
        }
        /// <summary>
        /// 显示验证没有通过的数据
        /// </summary>
        /// <returns></returns>
        protected string GetBadData()
        {
            if (excelData.Rows.Count == 0)
            {
                return "";
            }
            DataRow[] dr = excelData.Select("ErrorDate<>'正确'");
            if (dr.Count() == 0)
            {
                return "";
            }
            string strAlert = string.Empty;
            if (dr.Count() == excelData.Rows.Count)
            {
                strAlert = "<font color='red'><div class='clearDiv'></div>全部记录信息都没有验证通过</font>";
            }
            else
            {
                strAlert = "<font color='red'>【" + dr.Count() + "】记录信息验证没通过</font>";
            }
            #region
            strBadData = string.Empty;
            strBadData += "<div class=\"div_right_listtitle\">";
            strBadData += "<div style=\"margin-left:15px;font-weight:bold;padding-top:7px;\">" + strAlert + "</div>";
            strBadData += "</div>";
            strBadData += "<table class='table_list' cellpadding='0' cellspacing='0' >";
            strBadData += "<tr class='tr_title'>";
            strBadData += "<td>内容一</td>";
            strBadData += "<td>内容二</td>";
            strBadData += "<td>错误提示</td>";
            strBadData += "</tr>";

            for (int i = 0; i < dr.Count(); i++)
            {
                strBadData += "<tr class='tr_con_001'>";
                strBadData += "<td>" + dr[i]["内容一"] + "</td>";
                strBadData += "<td>" + dr[i]["内容二"] + "</td>";
                strBadData += "<td  style='text-align:left;'>" + dr[i]["ErrorDate"] + "</td>";
                strBadData += "</tr>";
            }
            strBadData += "</table>";

            #endregion
            return strBadData;
        }
        /// <summary>
        /// 核对每一项的值
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="type"></param>
        /// <param name="strErr"></param>
        /// <returns></returns>
        private bool CheckOption(DataRow dr, out string strErr)
        {
            bool bTemp = true;
            strErr = string.Empty;

            if (dr["内容一"].ToString().Trim() == "")
            {
                bTemp = false;
                strErr += "内容一为空值<br>";
            }
            if (dr["内容二"].ToString().Trim() == "")
            {
                bTemp = false;
                strErr += "内容二为空值<br>";
            }
            if (strErr.Length > 4)
            {
                strErr = strErr.Remove(strErr.Length - 4);
            }
            if (bTemp)
            {
                strErr = "正确";
            }

            return bTemp;

        }
        /// <summary>
        /// 验证上传数据的模板结构
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="list"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        private bool CheckUploadDataStructure(DataSet ds, string strTitle, out string errorMessage)
        {

            if (ds.Tables[0].Columns.Count != strTitle.Split(',').Count())
            {
                errorMessage = "上传文件模板字段的个数不对应,请核对模板后重新上传";
                return false;
            }
            List<string> listTemp = new List<string>();
            for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
            {
                if (ds.Tables[0].Columns[i].ColumnName.Trim().ToUpper() != strTitle.Split(',')[i].ToUpper())
                {
                    errorMessage = "第【" + (i + 1) + "】个字段的名称与定义模板中的名称不一致,请修改后重新上传";
                    return false;
                }
            }
            errorMessage = string.Empty;
            return true;
        }
        /// <summary>
        /// 验证上传的文件
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        private bool CheckFileName(string fileName, out string errorMessage)
        {
            if (fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower() != "xls")
            {
                errorMessage = "请选择后缀名为.xls的EXCEL文件上传";
                return false;
            }
            errorMessage = string.Empty;
            return true;
        }
        /// <summary>
        /// 删除上传的文件
        /// </summary>
        private void DeleteInvoiceFile()
        {
            string serverPath = Server.MapPath("../Resources/UpFile/");
            if (!Directory.Exists(serverPath))
            {
                Directory.CreateDirectory(serverPath);
            }
            foreach (string file in Directory.GetFiles(serverPath))
            {
                File.Delete(file);
            }
        }
        #region Excel读取
        private void GetExcelSchema(string filename, out OleDbConnection conn, out OleDbDataAdapter da, out System.Data.DataTable tblSchema, out IList<string> tblNames, string ifFirst, int i)
        {
            // 读取Excel数据,填充DataSet
            // 连接字符串           
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                            "Extended Properties=\"Excel 8.0;HDR=" + ifFirst + ";IMEX=" + i + "\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
                            "data source=" + filename;
            //string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" +
            //                "Extended Properties=\"Excel 12.0 Xml;HDR=" + ifFirst + ";IMEX=" + i + "\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
            //                "data source=" + filename;
            conn = null;
            da = null;
            tblSchema = null;
            tblNames = null;
            // 初始化连接,并打开
            conn = new OleDbConnection(connStr);
            conn.Open();
            //获取数据源的表定义元数据
            tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            conn.Close();
        }
        private static DataSet GetEachSheetContent(OleDbConnection conn, ref OleDbDataAdapter da, System.Data.DataTable tblSchema, ref IList<string> tblNames)
        {
            tblNames = new List<string>();
            foreach (DataRow row in tblSchema.Rows)
            {
                string tableName = (string)row["TABLE_NAME"];
                if (!tableName.StartsWith("_")) //skip system tables
                {
                    tblNames.Add((string)row["TABLE_NAME"]); // 读取sheet名
                }
            }

            //*********************************************************
            // 初始化适配器
            da = new OleDbDataAdapter();
            // 准备数据,导入DataSet
            DataSet ds = new DataSet();
            string sql_F = "SELECT * FROM [{0}]";
            string sheetName = "学生违纪记录信息$";
            foreach (string tblName in tblNames)
            {
                if (tblNames.Count > 1 && !tblName.StartsWith(sheetName))
                {
                    continue;
                }
                da.SelectCommand = new OleDbCommand(String.Format(sql_F, tblName), conn);
                try
                {
                    da.Fill(ds, tblName);
                }
                catch
                {
                    // 关闭连接
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                    throw;
                }
            }

            // 关闭连接
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }

            return ds;
        }
        #endregion
        /// <summary>
        /// 用户事件 写入导入数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnImpRight_Click(object sender, EventArgs e)
        {
            InputExcelDataToDB();
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            excelData.Clear();
            ShowHandel();
        }

        protected void btnBack_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(backurl))
            {
                Response.Redirect("内容显示页.aspx");
            }
            else
            {
                Response.Redirect(DESEncrypt.Decrypt(backurl));
            }
        }  


PS:导入的模版要和strTempletTitle1 中内容个数相同,且内容类型相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值