1、JSP页面
<div id="hideDiag"> <form id="dataForm" enctype="multipart/form-data" > <table class="tableForm" cellspacing="8"> <tr> <td class="td100" align="right">请选择excel文件:</td> <td class="td200"> <input type="file" name="excelFile" id="excelFile"/> </td> </tr> </table> </form> </div> <div id="progress" style="display: none" > <div id="title"> <span id="text">导入进度</span> <div id="close">X</div> </div> <div id="progressBar"> <div id="uploaded"></div> </div> <div id="info"></div> </div>
2、JS
function save(){ if(!$("#dataForm").form('validate')){ return ; } var form = $("#dataForm"); var options = { url:'/mallGiftAction/save.shtml', type:'post', beforeSend: ajaxLoading, success:function(data) { ajaxLoadEnd(); if(data.success){ $('#tb_mallGift').datagrid('reload'); $('#tb_mallGift').datagrid('clearSelections'); }else{ $.messager.info(data.msg); $("#progress").css("display", "none"); } } }; form.ajaxSubmit(options); } function ajaxLoading(){ $('#hideDiag').dialog('close'); $("#progress").css("display", "block"); var myDate = new Date(); startTime = myDate.getTime(); $(this).attr("disabled", true); window.setTimeout("getProgressBar()", 1000); $("<div class=\"datagrid-mask\"></div>").css({display:"block",width:"100%",height:$(window).height()}).appendTo("body"); } function ajaxLoadEnd(){ $(".datagrid-mask").remove(); }
3、Action
@RequestMapping(value = "/save") @ResponseBody public ResultVO save(String excelFilePath, MultipartFile excelFile, HttpServletRequest request, HttpServletResponse response) { try { mallGiftService.doStockin(excelFile,request); return success("导入成功"); } catch (Exception e) { return error(e.getMessage()); } }
4、Service
public void doStockin(MultipartFile excelFile, HttpServletRequest request) throws Exception { // excel读取的字段 Map<String, String> beanNameMap = new HashMap<String, String>(); beanNameMap.put("卡号", "cardNo"); beanNameMap.put("密码", "verifyCode"); // 读取excel数据 List<Map<String, Object>> list = ExcelUtil.parseExcel(excelFile, beanNameMap); List<MallGift> mallGiftList = ExcelUtil.toObjectList(list, MallGift.class); int totalCount = mallGiftList.size(); int count = 1; // excel数据入库 for (MallGift mallGift : mallGiftList) { mallGift.setStatus(MallGift.STATUS_NEW); // 加载监听器 ProgressModel status = new ProgressModel(); status.setTotalCount(totalCount); status.setOverCount(count++); request.getSession().setAttribute("status", status); mallGiftDao.buffSave(mallGift); } }
5、ExcelUtil
public static List<Map<String, Object>> parseExcel(MultipartFile excelFile, Map<String, String> beanNameMap) throws IOException { List<Map<String, Object>> result = new LinkedList<Map<String, Object>>(); InputStream is = excelFile.getInputStream(); XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); XSSFRow beanNameRow = xssfWorkbook.getSheetAt(0).getRow(0); int excleRowLength = xssfWorkbook.getSheetAt(0).getRow(0).getPhysicalNumberOfCells(); String[] columnName = new String[excleRowLength]; for (int i = 0; i < columnName.length; i++) { XSSFCell name = beanNameRow.getCell(i); Iterator<String> it = beanNameMap.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); String value = beanNameMap.get(key); if (key.trim().equals(name.getStringCellValue())) { columnName[i] = value; } } } for (int sheetIndex = 0; sheetIndex < xssfWorkbook.getNumberOfSheets(); sheetIndex++) { XSSFSheet sheet = (XSSFSheet) xssfWorkbook.getSheetAt(sheetIndex); for (int rowIndex = 1; rowIndex < sheet.getPhysicalNumberOfRows(); rowIndex++) { XSSFRow row = sheet.getRow(rowIndex); Map<String, Object> map = new HashMap<String, Object>(); for (int cellIndex = 0; cellIndex < xssfWorkbook.getSheetAt(0).getRow(0).getPhysicalNumberOfCells(); cellIndex++) { XSSFCell cell = row.getCell(cellIndex); String value = getCellValue(cell); if (StringUtils.isEmpty(value)) { throw new BaseException("Excel表格中的第:" + (rowIndex + 1) + "行第" + (cellIndex + 1) + "列为空."); } if (columnName[cellIndex] != null && columnName[cellIndex].trim().length() > 0) { map.put(columnName[cellIndex].trim(), getCellValue(cell)); } } result.add(map); } } return result; } /** * 利用反射将 List<Map<String,Object>>数据 生成相应的List<T>数据 * */ public static <T> List<T> toObjectList(List<Map<String, Object>> list, Class<T> clazz) throws Exception { List<T> returnList = new LinkedList<T>(); for (int i = 0; i < list.size(); i++) { Set<Map.Entry<String, Object>> set = list.get(i).entrySet(); Iterator<Entry<String, Object>> it = set.iterator(); T obj = clazz.newInstance(); Method[] methods = clazz.getDeclaredMethods(); while (it.hasNext()) { Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next(); for (Method m : methods) { if (m.getName().startsWith("set")) { String methodName = entry.getKey().toString(); StringBuffer sb = new StringBuffer(methodName); sb.replace(0, 1, (methodName.charAt(0) + "").toUpperCase()); methodName = "set" + sb.toString(); if (methodName.equals(m.getName())) { m.invoke(obj, entry.getValue()); break; } } } } returnList.add(obj); } return returnList; } /** * 获取当前单元格内容 */ private static String getCellValue(Cell cell) { String value = ""; if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); value = sdf.format(date); } else { DecimalFormat format = new DecimalFormat("###################.###########"); value = format.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case Cell.CELL_TYPE_BOOLEAN: Boolean data = cell.getBooleanCellValue(); value = data.toString(); break; case Cell.CELL_TYPE_ERROR: System.out.println("单元格内容出现错误"); break; case Cell.CELL_TYPE_FORMULA: DecimalFormat format = new DecimalFormat("###################.###########"); value = format.format(cell.getNumericCellValue()); if (value.equals("NaN")) { value = cell.getStringCellValue().toString(); } break; case Cell.CELL_TYPE_BLANK: System.out.println("单元格内容 为空值 "); break; default: value = cell.getStringCellValue().toString(); break; } } return value; } public static void createExcel(List<Map<String, Object>> list, LinkedHashMap<String, String> headMap, String fileName) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); sheet.setDefaultRowHeightInPoints(10); sheet.setDefaultColumnWidth(10); int rowNum = 0; // 设置标题行 HSSFCellStyle titleStyle = workbook.createCellStyle(); titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直 titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平 HSSFFont font = workbook.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 titleStyle.setFont(font); HSSFRow titleRow = sheet.createRow((short) 0); int m = 0; for (String title : headMap.values()) { HSSFCell cell = titleRow.createCell(m); cell.setCellValue(title); cell.setCellStyle(titleStyle); m++; } rowNum++; HSSFCellStyle style = workbook.createCellStyle(); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平 // 设置内容行 for (Map<String, Object> map : list) { HSSFRow row = sheet.createRow((short) rowNum); int i = 0; for (String value : headMap.keySet()) { HSSFCell cell = row.createCell(i); cell.setCellValue(String.valueOf(map.get(value))); cell.setCellStyle(style); i++; } rowNum++; } OutputStream out = null; try { out = new FileOutputStream(fileName); workbook.write(out); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
6、ProgressModel
private long pBytesRead = 0L; private long pContentLength = 0L; private int totalCount; private int overCount; public ProgressModel() { pBytesRead = 0L; pContentLength = 0L; } public long getPBytesRead() { return pBytesRead; } public void setPBytesRead(long bytesRead) { pBytesRead = bytesRead; } public long getPContentLength() { return pContentLength; } public void setPContentLength(long contentLength) { pContentLength = contentLength; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getOverCount() { return overCount; } public void setOverCount(int overCount) { this.overCount = overCount; }
7、MallGiftDao
public void buffSave(MallGift mallGift) { try { super.buffSave(mallGift);//存入数据库方法 } catch (RuntimeException e) { Throwable cause = e.getCause(); if (cause instanceof MySQLIntegrityConstraintViolationException) { throw new RuntimeException("卡号:" + mallGift.getCardNo() + "在数据库已经存在,不能重复导入"); } } //myCache.set(mallGift); //if (StringUtils.isNotEmpty(mallGift.getCardNo())) // myCache.hSet(mallGift, "cardNo", mallGift.getCardNo()); }
相关推荐
综上所述,C#实现Excel数据导入MySQL涉及到的主要技术点包括C#编程、Excel文件读取、数据库连接与操作、数据流处理以及性能优化。在实际操作中,需要根据具体需求和环境调整策略,确保程序的稳定性和效率。
以下是一个关于“Excel导入MySQL数据库实例”的详细知识讲解。 首先,了解基本概念: 1. Excel:Microsoft Excel是一款电子表格程序,允许用户创建、编辑和共享包含数字、文本和公式的数据。 2. MySQL:MySQL是一种...
内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...
本教程将聚焦于“完整的上传,excel导入mysql数据库”这一主题,针对公司CRM后台系统的渠道数据导入工具进行深入探讨。这个过程涉及到的技术栈主要包括海量数据处理、SpringMVC框架的应用以及POI库对Excel文件的操作...
在IT行业中,将Excel文件的数据解析并导入到MySQL...以上就是“Java解析excel导入MySQL数据库”这一主题的主要技术细节。通过理解这些知识点,你可以根据自身需求定制和扩展这个功能,使其更加适应实际的工作场景。
可以使用SpringBoot的`@SpringBootTest`注解和JUnit进行单元测试,模拟HTTP请求,验证Excel导入功能是否按预期工作。 6. **项目结构**: - 一个标准的SpringBoot项目通常包括`src/main/java`下的`main`和`test`...
最后,需要将 Excel 文件中的数据导入到 MySQL 数据库中。这里可以右键点击 test 数据库下的某一张表,选择 "导入"-"MC Excel 文件",然后选择刚刚创建的 Excel 文件。这样,h2 数据库中的数据将被成功导入到 MySQL ...
本主题将深入探讨如何利用Python实现Excel数据一键导入MySQL数据库,以及如何从MySQL数据库中一键读取数据到Excel表格。 首先,我们需要了解Python中的两个关键库:`pandas`和`mysql-connector-python`。`pandas`是...
然而,当需要将大量数据从Excel导入到数据库时,手动操作不仅耗时,还容易出错。本篇文章将详细讲解如何实现“Excel批量导入数据库”,以及利用小工具提高效率。 一、Excel与数据库的交互原理 Excel数据批量导入...
标题中的“将excel数据导入mysql数据库--Excel2Mysql工具”揭示了本次讨论的主要内容,即如何使用特定的工具——Excel2Mysql,将Excel表格中的数据高效地导入到MySQL数据库中。这是一个常见的数据迁移需求,特别是在...
在Java开发中,将Excel表格数据导入MySQL数据库是一项常见的任务,尤其在数据处理、数据分析以及系统集成等场景中。这个项目提供了一套完整的源码,可以直接在Eclipse环境中运行,帮助开发者快速实现这一功能。下面...
CSV文件导入MySQL数据库工具软件 CSVtoDB v1.0.zip 因手头项目需要向MYSQL数据库导入大量的EXCEL数据。网上搜索了相关博客,受限于功能或者本人有一点点的小强迫,业余时间开发了本工具。 EXCEL导入到MYSQL有多种...
本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...
基于python实现的Excel一键导入MySQL数据库,MySQL数据库一键读取到Excel表格+源码+使用教程+案例展示,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介:...
Excel 数据导入 MySQL 数据库的几种方案 在数据分析和处理中,经常需要将 Excel 表格中的数据导入到 MySQL 数据库中,以便进行进一步的数据分析和处理。今天,我们将讨论如何将 Excel 数据导入 MySQL 数据库的几种...
总之,将Excel文件导入MySQL数据库是一个常见的数据操作任务,通过合理利用各种工具和方法,可以高效、准确地完成数据迁移。在实际工作中,根据具体需求和环境选择合适的方法,同时确保数据安全和完整性。
以下是对`PHPExcel`类实现Excel导入MySQL数据库功能的详细说明。 1. **安装和下载**: 首先,你需要从`phpexcel.codeplex.com`下载`PHPExcel`库。这个库包含了处理Excel文件所需的所有类。下载后,将其解压缩并引入...
本知识点主要围绕如何将Excel中的数据高效地导入到MySQL数据库进行讨论。 首先,我们需要理解Excel数据的格式。Excel表格通常包含多行多列的数据,每一行代表一个记录,每一列代表一种属性。这些数据可以通过VBA...
本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...