ajax模拟表单提交,后台使用npoi实现导入操作 方式一

页面代码:

  <form id="form1" enctype="multipart/form-data">
                <div style="float:right">
                    &nbsp;
                    <button type="button" class="btn btn-primary" onclick="$(‘#fileUpload‘).click()" id="reviewFile">浏览</button>
                    <button class="btn btn-primary" type="button" style="margin-left:5px;height:30px;" id="dataExport">批量导入</button>
                    <input type="button" class="btn btn-primary" style="margin-left:5px;height:30px;" id="downLoad" value="下载模板">
                </div>
                <div style="float:right;margin-top:5px">
                    <input id="fileUpload" name="fileUpload" type="file" style="display:none" />
                    <input id="fileText" type="text" class="form-control" disabled />
                </div>
                <script>
                    $("#fileUpload").change(function () {
                        $("#fileText").val($(this).val());
                    })
                </script>
            </form>

js代码:

 //导入excel数据
        $("#dataExport").click(function () {
            var formData = new FormData($(‘form‘)[0]);
            $.ajax({
                url: ‘/BaseInfoPage/Upload‘,
                type: ‘POST‘,
                xhr: function () {
                    return $.ajaxSettings.xhr();
                },
                data: formData,
                cache: false,
                contentType: false,
                processData: false,
                success: function (data) {
                    if (data == "导入成功!") {
                        layer.msg(data, { icon: 1, time: 5000 }, function () {
                            location.reload();    //刷新父页面   第二个参数设置msg显示的时间长短
                        });
                    } else {
                        layer.msg(data, { icon: 0, time: 5000 }, function () {
                            return;
                        });
                    }

                },
                error: function (e) {
                    layer.msg(e, { icon: 0, time: 5000 }, function () {
                        return;
                    });
                }

            });
        })

c#后台代码:

 public string Upload(HttpPostedFileBase fileUpload)
        {
            if (fileUpload == null)
            {
                return "文件为空";
            }
            string fileExtension = Path.GetExtension(fileUpload.FileName);//获取文件名后缀
            try
            {
                //判断文件类型
                if (".xls" == fileExtension || ".xlsx" == fileExtension)
                {
                    //将硬盘路径转化为服务器路径的文件流
                    //string fileName = Path.Combine(Request.MapPath("~/ExcelTemplate"), Path.GetFileName(fileUpload.FileName));
                    string fileName = fileUpload.FileName;
                    string filePath = "";
                    filePath = CSysCfg.exFilePath;
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    //保存模板到服务器
                    fileUpload.SaveAs(filePath + "\\" + fileName);

                    //从NPOI读取到的Excel的数据,保存到excelTable里
                    DataTable excelTable = new DataTable();
                    excelTable = GetExcelDataTable(filePath + "\\" + fileName);//自定义方法

                    //把表的中文表头转换成数据库表中对应的英文
                    DataTable dbdata = new DataTable();
                    dbdata.Columns.Add("ltl_Id");
                    dbdata.Columns.Add("ltl_PlateId");
                    dbdata.Columns.Add("ltl_StarteTime");
                    dbdata.Columns.Add("ltl_EndTime");

                    for (int i = 0; i < excelTable.Rows.Count; i++)
                    {
                        DataRow dr = excelTable.Rows[i];
                        DataRow dr_ = dbdata.NewRow();
                        dr_["ltl_Id"] = dr["申请编号"];
                        dr_["ltl_PlateId"] = dr["车牌号码"];
                        dr_["ltl_StarteTime"] = dr["开始日期"];
                        dr_["ltl_EndTime"] = dr["结束日期"];
                        dbdata.Rows.Add(dr_);
                    }
                    RemoveEmpty(dbdata);//自定义方法

                    //获取连接字符串,调用批量插入数据库的方法  需更改web.config添加配置
                    string constr = System.Configuration.ConfigurationManager.AppSettings["exportData"];
                    SqlBulkCopyByDatatable(constr, "LargeTransportLicense", dbdata);//自定义方法(连接字符串,表名,数据)
                    return "导入成功!";
                }
                else
                {
                    return "只可以选择Excel文件!";
                }
            }
            catch
            {
                return "导入失败!";
            }
        }
        // 从Excel中获取数据到DataTable
        public static DataTable GetExcelDataTable(string filePath)
        {
            IWorkbook Workbook;
            DataTable table = new DataTable();
            try
            {
                using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
                    string fileExt = Path.GetExtension(filePath).ToLower();
                    if (fileExt == ".xls")
                    {
                        Workbook = new HSSFWorkbook(fileStream);
                    }
                    else if (fileExt == ".xlsx")
                    {
                        Workbook = new XSSFWorkbook(fileStream);
                    }
                    else
                    {
                        Workbook = null;

                    }
                }
                //定位在第一个sheet
                ISheet sheet = Workbook.GetSheetAt(0);
                //第一行为标题行
                IRow headerRow = sheet.GetRow(1);
                int cellCount = headerRow.LastCellNum;// 是当前行的总列数
                int rowCount = sheet.LastRowNum;////LastRowNum 是当前表的总行数-1(注意)

                //循环添加标题列
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {
                    DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
                    table.Columns.Add(column);
                }
                List<string> regionName = new List<string>();
                //数据
                for (int i = (sheet.FirstRowNum + 2); i <= rowCount; i++)
                {
                    IRow row = sheet.GetRow(i);
                    DataRow dataRow = table.NewRow();
                    if (row != null)
                    {
                        for (int j = row.FirstCellNum; j < cellCount; j++)
                        {
                            if (row.GetCell(j) != null)
                            {
                                dataRow[j] = GetCellValue2(row.GetCell(j));

                            }

                        }
                    }
                    table.Rows.Add(dataRow);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return table;
        }

        //数据类型判断  方式一
        private static string GetCellValue(NPOI.SS.UserModel.ICell cell)
        {
            if (cell == null)
            {
                return string.Empty;
            }
            else
            {
                switch (cell.CellType)
                {
                    case CellType.Blank:
                        return string.Empty;
                    case CellType.Boolean:
                        return cell.BooleanCellValue.ToString();
                    case CellType.Error:
                        return cell.ErrorCellValue.ToString();
                    case CellType.Numeric://数值

                    case CellType.Unknown:
                    default:
                        return cell.ToString();
                    case CellType.String:
                        return cell.StringCellValue;
                    case CellType.Formula://公式
                        try
                        {
                            HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
                            e.EvaluateInCell(cell);
                            return cell.ToString();
                        }
                        catch
                        {
                            return cell.NumericCellValue.ToString();
                        }
                }
            }
        }

        //数据类型判断,并设置为对应的数据类型 方式二
        public static object GetCellValue2(NPOI.SS.UserModel.ICell cell)
        {
            object value = null;
            if (cell == null)
            {
                value = 0;
            }
            try
            {
                if (cell.CellType != CellType.Blank)
                {
                    switch (cell.CellType)
                    {
                        case CellType.Blank:
                            value = string.Empty;
                            break;
                        case CellType.Numeric:
                            // 日期
                            if (DateUtil.IsCellDateFormatted(cell))
                            {
                                value = cell.DateCellValue;
                            }
                            else
                            {
                                // 数值
                                value = cell.NumericCellValue;
                            }
                            break;
                        case CellType.Boolean:
                            // Boolean type
                            value = cell.BooleanCellValue;
                            break;
                        case CellType.Formula:
                            value = cell.CellFormula;
                            break;
                        default:
                            // String type
                            value = cell.StringCellValue;
                            break;
                    }
                }
                else
                {
                    value = 0;
                }

            }
            catch (Exception)
            {
                value = 0;
            }

            return value;
        }

        /// <summary>
        /// 大数据插入
        /// </summary>
        /// <param name="connectionString">目标库连接</param>
        /// <param name="TableName">目标表</param>
        /// <param name="dtSelect">来源数据</param>
        public static void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dtSelect)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
                {
                    try
                    {
                        sqlbulkcopy.DestinationTableName = TableName;
                        sqlbulkcopy.BatchSize = 20000;
                        sqlbulkcopy.BulkCopyTimeout = 0;//不限时间
                        for (int i = 0; i < dtSelect.Columns.Count; i++)
                        {

                            sqlbulkcopy.ColumnMappings.Add(dtSelect.Columns[i].ColumnName, dtSelect.Columns[i].ColumnName);
                        }
                        sqlbulkcopy.WriteToServer(dtSelect);
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }
                }
            }
        }

        //在导入Excel数据的时候,有时候会有空行,用RemoveEmpty方法去空
        protected void RemoveEmpty(DataTable dt)
        {
            List<DataRow> removelist = new List<DataRow>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                bool IsNull = true;
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim()))
                    {
                        IsNull = false;
                    }
                }
                if (IsNull)
                {
                    removelist.Add(dt.Rows[i]);
                }
            }
            for (int i = 0; i < removelist.Count; i++)
            {
                dt.Rows.Remove(removelist[i]);
            }
        }

原文地址:https://www.cnblogs.com/-lile/p/11358359.html

时间: 2024-08-01 09:33:09

ajax模拟表单提交,后台使用npoi实现导入操作 方式一的相关文章

表单提交---前端页面模拟表单提交(form)

有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认的下载功能,如果用ajax请求,则无法调用.所以只能用表单提交的方式请求后台方可调用浏览器默认的下载功能.这个时候我们只能自己手动添加<form></form>元素.这里LZ提供我自己遇到的两种情况: 一:在原有的html结构包上<form></form>标签,

ajax form表单提交 input file中的文件

ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了解决这个问题我走了不少弯路: 1.用原生的 input file , 不支持ajax上传文件,你肯定会说可以用 ajax form表单上传了呀?不过我后面还要调用上传成功后用js处理一些对话框,所以这种方法排除 2.用了 uploadify 上传插件,弄出来能上传东西,结果不理想:因为不能判断上传的

&lt;记录&gt; axios 模拟表单提交数据

ajax 可以通过 FormData 对象模拟表单提交数据 第一种方式:自定义FormData信息 //创建formData对象 var formData = new FormData(); //添加键值对 formData.append("team_id", this.team_id) formData.append("content", this.content) formData.append("img", this.img) formDa

HTTP通信模拟表单提交数据

前面记录过一篇关于http通信,发送数据的文章:http://www.cnblogs.com/hyyq/p/7089040.html,今天要记录的是如何通过http模拟表单提交数据. 一.通过GET请求方式提交:最简单的一种方式 直接在链接后面跟上要提交的数据即可,比如: http://yychf.55555.io/get.do?username=yyc&password=yychf,通过http直接发送.然后在服务器端可以通过request.getParameter()方法来获得参数值.如要获

ajax的表单提交,与传送数据

ajax的表单提交 $.ajax ({ url: "<%=basePath%>resource/addPortDetectOne.action", dataType: "json", method : 'post', data: $("#form_portDetect").serialize(),              //传送表单数据 success : function(data_) { //alert(data_); ale

C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)

其原理是,利用winfrom模拟表单提交数据,将要提交的参数提交给网页,网页执行代码,得到数据,然后Winform程序将网页的所有源代码读取下来,这样就达到windows应用程序和web应用程序之间传参和现实数据的效果了. - 首先创建一个windows应用程序和web应用程序. - 在web应用程序中,将网页切换到源代码并把源代码中一些没用的代码删掉,只保留头部,在windows应用程序读取网页源码时,这些都会被一起读下来,但这些都是没用的数据,而且删掉没什么影响.需要保留的代码如下: - <

mvc Html.BeginForm和Ajax.BeginFrom表单提交

今天使用异步提交附件后台死活获取不到文件,代码还原 1 @using (Ajax.BeginForm("Add", "Event", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "EntryFormJS.SubmitSuccess" }, new { id = "myform" })) 2 { 3 <div class="form

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N

利用HttpWebRequest模拟表单提交

1 using System; 2 using System.Collections.Specialized; 3 using System.IO; 4 using System.Net; 5 using System.Text; 6 7 namespace Allyn.Common 8 { 9 public class HttpHelper 10 { 11 /// <summary> 12 /// 获取指定路径数据 13 /// </summary> 14 /// <par