页面代码:

  1. <form id="form1" enctype="multipart/form-data">
  2. <div style="float:right">
  3. &nbsp;
  4. <button type="button" class="btn btn-primary" onclick="$('#fileUpload').click()" id="reviewFile">浏览</button>
  5. <button class="btn btn-primary" type="button" style="margin-left:5px;height:30px;" id="dataExport">批量导入</button>
  6. <input type="button" class="btn btn-primary" style="margin-left:5px;height:30px;" id="downLoad" value="下载模板">
  7. </div>
  8. <div style="float:right;margin-top:5px">
  9. <input id="fileUpload" name="fileUpload" type="file" style="display:none" />
  10. <input id="fileText" type="text" class="form-control" disabled />
  11. </div>
  12. <script>
  13. $("#fileUpload").change(function () {
  14. $("#fileText").val($(this).val());
  15. })
  16. </script>
  17. </form>

js代码:

  1. //导入excel数据
  2. $("#dataExport").click(function () {
  3. var formData = new FormData($('form')[0]);
  4. $.ajax({
  5. url: '/BaseInfoPage/Upload',
  6. type: 'POST',
  7. xhr: function () {
  8. return $.ajaxSettings.xhr();
  9. },
  10. data: formData,
  11. cache: false,
  12. contentType: false,
  13. processData: false,
  14. success: function (data) {
  15. if (data == "导入成功!") {
  16. layer.msg(data, { icon: 1, time: 5000 }, function () {
  17. location.reload(); //刷新父页面 第二个参数设置msg显示的时间长短
  18. });
  19. } else {
  20. layer.msg(data, { icon: 0, time: 5000 }, function () {
  21. return;
  22. });
  23. }
  24.  
  25. },
  26. error: function (e) {
  27. layer.msg(e, { icon: 0, time: 5000 }, function () {
  28. return;
  29. });
  30. }
  31.  
  32. });
  33. })

c#后台代码:

  1. public string Upload(HttpPostedFileBase fileUpload)
  2. {
  3. if (fileUpload == null)
  4. {
  5. return "文件为空";
  6. }
  7. string fileExtension = Path.GetExtension(fileUpload.FileName);//获取文件名后缀
  8. try
  9. {
  10. //判断文件类型
  11. if (".xls" == fileExtension || ".xlsx" == fileExtension)
  12. {
  13. //将硬盘路径转化为服务器路径的文件流
  14. //string fileName = Path.Combine(Request.MapPath("~/ExcelTemplate"), Path.GetFileName(fileUpload.FileName));
  15. string fileName = fileUpload.FileName;
  16. string filePath = "";
  17. filePath = CSysCfg.exFilePath;
  18. if (!Directory.Exists(filePath))
  19. {
  20. Directory.CreateDirectory(filePath);
  21. }
  22. //保存模板到服务器
  23. fileUpload.SaveAs(filePath + "\\" + fileName);
  24.  
  25. //从NPOI读取到的Excel的数据,保存到excelTable里
  26. DataTable excelTable = new DataTable();
  27. excelTable = GetExcelDataTable(filePath + "\\" + fileName);//自定义方法
  28.  
  29. //把表的中文表头转换成数据库表中对应的英文
  30. DataTable dbdata = new DataTable();
  31. dbdata.Columns.Add("ltl_Id");
  32. dbdata.Columns.Add("ltl_PlateId");
  33. dbdata.Columns.Add("ltl_StarteTime");
  34. dbdata.Columns.Add("ltl_EndTime");
  35.  
  36. for (int i = ; i < excelTable.Rows.Count; i++)
  37. {
  38. DataRow dr = excelTable.Rows[i];
  39. DataRow dr_ = dbdata.NewRow();
  40. dr_["ltl_Id"] = dr["申请编号"];
  41. dr_["ltl_PlateId"] = dr["车牌号码"];
  42. dr_["ltl_StarteTime"] = dr["开始日期"];
  43. dr_["ltl_EndTime"] = dr["结束日期"];
  44. dbdata.Rows.Add(dr_);
  45. }
  46. RemoveEmpty(dbdata);//自定义方法
  47.  
  48. //获取连接字符串,调用批量插入数据库的方法 需更改web.config添加配置
  49. string constr = System.Configuration.ConfigurationManager.AppSettings["exportData"];
  50. SqlBulkCopyByDatatable(constr, "LargeTransportLicense", dbdata);//自定义方法(连接字符串,表名,数据)
  51. return "导入成功!";
  52. }
  53. else
  54. {
  55. return "只可以选择Excel文件!";
  56. }
  57. }
  58. catch
  59. {
  60. return "导入失败!";
  61. }
  62. }
  63. // 从Excel中获取数据到DataTable
  64. public static DataTable GetExcelDataTable(string filePath)
  65. {
  66. IWorkbook Workbook;
  67. DataTable table = new DataTable();
  68. try
  69. {
  70. using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
  71. {
  72. //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
  73. string fileExt = Path.GetExtension(filePath).ToLower();
  74. if (fileExt == ".xls")
  75. {
  76. Workbook = new HSSFWorkbook(fileStream);
  77. }
  78. else if (fileExt == ".xlsx")
  79. {
  80. Workbook = new XSSFWorkbook(fileStream);
  81. }
  82. else
  83. {
  84. Workbook = null;
  85.  
  86. }
  87. }
  88. //定位在第一个sheet
  89. ISheet sheet = Workbook.GetSheetAt();
  90. //第一行为标题行
  91. IRow headerRow = sheet.GetRow();
  92. int cellCount = headerRow.LastCellNum;// 是当前行的总列数
  93. int rowCount = sheet.LastRowNum;////LastRowNum 是当前表的总行数-1(注意)
  94.  
  95. //循环添加标题列
  96. for (int i = headerRow.FirstCellNum; i < cellCount; i++)
  97. {
  98. DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
  99. table.Columns.Add(column);
  100. }
  101. List<string> regionName = new List<string>();
  102. //数据
  103. for (int i = (sheet.FirstRowNum + ); i <= rowCount; i++)
  104. {
  105. IRow row = sheet.GetRow(i);
  106. DataRow dataRow = table.NewRow();
  107. if (row != null)
  108. {
  109. for (int j = row.FirstCellNum; j < cellCount; j++)
  110. {
  111. if (row.GetCell(j) != null)
  112. {
  113. dataRow[j] = GetCellValue2(row.GetCell(j));
  114.  
  115. }
  116.  
  117. }
  118. }
  119. table.Rows.Add(dataRow);
  120. }
  121. }
  122. catch (Exception ex)
  123. {
  124. throw ex;
  125. }
  126. return table;
  127. }
  128.  
  129. //数据类型判断 方式一
  130. private static string GetCellValue(NPOI.SS.UserModel.ICell cell)
  131. {
  132. if (cell == null)
  133. {
  134. return string.Empty;
  135. }
  136. else
  137. {
  138. switch (cell.CellType)
  139. {
  140. case CellType.Blank:
  141. return string.Empty;
  142. case CellType.Boolean:
  143. return cell.BooleanCellValue.ToString();
  144. case CellType.Error:
  145. return cell.ErrorCellValue.ToString();
  146. case CellType.Numeric://数值
  147.  
  148. case CellType.Unknown:
  149. default:
  150. return cell.ToString();
  151. case CellType.String:
  152. return cell.StringCellValue;
  153. case CellType.Formula://公式
  154. try
  155. {
  156. HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
  157. e.EvaluateInCell(cell);
  158. return cell.ToString();
  159. }
  160. catch
  161. {
  162. return cell.NumericCellValue.ToString();
  163. }
  164. }
  165. }
  166. }
  167.  
  168. //数据类型判断,并设置为对应的数据类型 方式二
  169. public static object GetCellValue2(NPOI.SS.UserModel.ICell cell)
  170. {
  171. object value = null;
  172. if (cell == null)
  173. {
  174. value = ;
  175. }
  176. try
  177. {
  178. if (cell.CellType != CellType.Blank)
  179. {
  180. switch (cell.CellType)
  181. {
  182. case CellType.Blank:
  183. value = string.Empty;
  184. break;
  185. case CellType.Numeric:
  186. // 日期
  187. if (DateUtil.IsCellDateFormatted(cell))
  188. {
  189. value = cell.DateCellValue;
  190. }
  191. else
  192. {
  193. // 数值
  194. value = cell.NumericCellValue;
  195. }
  196. break;
  197. case CellType.Boolean:
  198. // Boolean type
  199. value = cell.BooleanCellValue;
  200. break;
  201. case CellType.Formula:
  202. value = cell.CellFormula;
  203. break;
  204. default:
  205. // String type
  206. value = cell.StringCellValue;
  207. break;
  208. }
  209. }
  210. else
  211. {
  212. value = ;
  213. }
  214.  
  215. }
  216. catch (Exception)
  217. {
  218. value = ;
  219. }
  220.  
  221. return value;
  222. }
  223.  
  224. /// <summary>
  225. /// 大数据插入
  226. /// </summary>
  227. /// <param name="connectionString">目标库连接</param>
  228. /// <param name="TableName">目标表</param>
  229. /// <param name="dtSelect">来源数据</param>
  230. public static void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dtSelect)
  231. {
  232. using (SqlConnection conn = new SqlConnection(connectionString))
  233. {
  234. using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
  235. {
  236. try
  237. {
  238. sqlbulkcopy.DestinationTableName = TableName;
  239. sqlbulkcopy.BatchSize = ;
  240. sqlbulkcopy.BulkCopyTimeout = ;//不限时间
  241. for (int i = ; i < dtSelect.Columns.Count; i++)
  242. {
  243.  
  244. sqlbulkcopy.ColumnMappings.Add(dtSelect.Columns[i].ColumnName, dtSelect.Columns[i].ColumnName);
  245. }
  246. sqlbulkcopy.WriteToServer(dtSelect);
  247. }
  248. catch (System.Exception ex)
  249. {
  250. throw ex;
  251. }
  252. }
  253. }
  254. }
  255.  
  256. //在导入Excel数据的时候,有时候会有空行,用RemoveEmpty方法去空
  257. protected void RemoveEmpty(DataTable dt)
  258. {
  259. List<DataRow> removelist = new List<DataRow>();
  260. for (int i = ; i < dt.Rows.Count; i++)
  261. {
  262. bool IsNull = true;
  263. for (int j = ; j < dt.Columns.Count; j++)
  264. {
  265. if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim()))
  266. {
  267. IsNull = false;
  268. }
  269. }
  270. if (IsNull)
  271. {
  272. removelist.Add(dt.Rows[i]);
  273. }
  274. }
  275. for (int i = ; i < removelist.Count; i++)
  276. {
  277. dt.Rows.Remove(removelist[i]);
  278. }
  279. }

注:此方法需在web.config中添加配置

  1. <appSettings>
  2.  
  3. <add key="exportData" value="server=xxx;database=xx;uid=xxx;pwd=xxx" />
  4.  
  5. </appSettings>

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

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

    页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...

  2. 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。

    由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...

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

    有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认 ...

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

    ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了 ...

  5. <记录> axios 模拟表单提交数据

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

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

    ajax的表单提交 $.ajax ({ url: "<%=basePath%>resource/addPortDetectOne.action", dataType: ...

  7. 项目总结15:JavaScript模拟表单提交(实现window.location.href-POST提交数据效果)

    JavaScript模拟表单提交(实现window.location.href-POST提交数据效果) 前沿 1-在具体项目开发中,用window.location.href方法下载文件,因windo ...

  8. 利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类

    利用HttpWebRequest模拟表单提交   1 using System; 2 using System.Collections.Specialized; 3 using System.IO; ...

  9. HTTP通信模拟表单提交数据

    前面记录过一篇关于http通信,发送数据的文章:http://www.cnblogs.com/hyyq/p/7089040.html,今天要记录的是如何通过http模拟表单提交数据. 一.通过GET请 ...

随机推荐

  1. centos彻底删除文件夹创建文件

    centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ...

  2. python入门007

    一.深浅copy 浅拷贝:是把原列表第一层的内存地址完全拷贝一份给新列表.即只能保证对原列表中第一层地址(不可变类型)的改操作不受影响,涉及到原列表中第二层地址(可变类型)的改操作时,原列表变,新列表 ...

  3. AbstractQueuedSynchronizer(AQS)抽丝剥茧深入了解JUC框架原理

    目录 简介 Lock简单实用 主体框架 原理解析 独占锁 AQS数据结构 CLH数据结构 acquire实现步骤 addWaiter acquireQueued shouldParkAfterFail ...

  4. Let's GO(三)

    人生苦短,Let's GO Let's GO(一) Let's GO(二) Let's GO(三) Let's GO(四) 今天我学了什么? 1. 结构体(struct) /* type TYPENA ...

  5. DVWA学习记录 PartⅢ

    CSRF 1. 题目 CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶意链接或者 ...

  6. flask 源码专题(十一):LocalStack和Local对象实现栈的管理

    目录 04 LocalStack和Local对象实现栈的管理 1.源码入口 1. flask源码关于local的实现 2. flask源码关于localstack的实现 3. 总结 04 LocalS ...

  7. Python并发编程05 /死锁现象、递归锁、信号量、GIL锁、计算密集型/IO密集型效率验证、进程池/线程池

    Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密集型效率验证.进程池/线程池 目录 Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密 ...

  8. C#根据反射动态创建ShowDoc接口文本信息

    我目前每天主要工作以开发api为主,这都离不开接口文档.如果远程对接的话前端总说Swagger不清晰,只能重新找一下新的接口文档.ShowDoc就是一个不错的选择,简洁.大方.灵活部署. 但是话说回来 ...

  9. 第四章:View的工作原理

    4.1 ViewRoot和DecorView ViewRoot对应于ViewRootImplement类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过Vie ...

  10. Python Ethical Hacking - VULNERABILITY SCANNER(4)

    Extracting & Submitting Forms Automatically Target website:http://10.0.0.45/dvwa/vulnerabilities ...