今天的系统开发中有一个需要解析excel数据的功能,然后将excel的数据插入到数据库。
首先要制作一个excel的导入模版,然后按模版格式读取数据。
实现代码如下,
前台代码:
<script> //确定 function ok_onclick(){ var validateForm = new Validater(); var frm = document.certificateForm; //TODO: 以后要把其他校验规则加上 validateForm.addRule(new SimpleRule(frm.CERTBATCH, validateRequired,"批量证书excel附件")); if ( validateForm.validate() ){ if(confirm("<bean:message key="common.tip.addConfirm"/>") == true){ frm.submit(); } } } function downloadCert(){ var url = '<c:url value="/itms/template/certTemplate.xls"/>'; var obj = document.getElementById('download'); obj.contentWindow.location.href = url; } windowHandler.onload = function(){ <c:if test="${ not empty _tipMsg}"> alert("${_tipMsg}"); </c:if> } </script> </head> <body> <html:form action="/certificate/certificateAction" method="POST" enctype="multipart/form-data" > <input type="hidden" id="_actionType" name="_actionType" value="certBatchInput" /> <table class="buttonTable"> <tr> <td> <owk:button property="okBtn" onclick="ok_onclick()" value="导入"/> <owk:button property="okBtn" onclick="downloadCert()" value="下载模版"/> </td> <td width="60px" ></td> </tr> </table> <table class="subjectEditTable"> <tr> <td><div class="subject"> <img src="<c:url value='/owk/common/images/Title1.gif'/>"> 批量证书录入 </div></td> </tr> </table> <table class="updateTable"> <tr> <td class="label"> 批量证书上传 </td> <td class="input" colspan="120"> <input type="file" required="true" id="CERTBATCH" name="CERTBATCH" style="width:600px;"></input> </td> </tr> </table> </html:form>
后台的action代码:
//批量证书信息导入功能,解析excel数据 @SuppressWarnings("unchecked") public ActionForward certBatchInput(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest, HttpServletResponse pResponse) throws Exception { //读取上传的模版文件 FormFile fileItem = (FormFile) pForm.getMultipartRequestHandler() .getFileElements().get("CERTBATCH"); InputStream is = null; try { is = fileItem.getInputStream(); } catch (IOException e) { e.printStackTrace(); throw new BusinessException("获取文件对象输入流出错"); } Workbook workbook = ExcelUtil.getWorkBook(is); // 获取导入列表sheet(0) Sheet sheet = workbook.getSheet(0); if (sheet == null) { throw new BusinessException("获取Excel第一个列表数据失败"); } Cell[] row1 = sheet.getRow(1); Cell[] row2 = sheet.getRow(2); if ( !row1[0].getContents().trim().equalsIgnoreCase( "招商银行分行IT管理系统证书信息录入模板") || !row2[0].getContents().trim().equalsIgnoreCase("分行名称") || !row2[1].getContents().trim().equalsIgnoreCase("姓名") || !row2[2].getContents().trim().equalsIgnoreCase("一事通ID") || !row2[3].getContents().trim().equalsIgnoreCase("专业条线") || !row2[4].getContents().trim().equalsIgnoreCase("级别") || !row2[5].getContents().trim() .equalsIgnoreCase("认证时间")) { throw new BusinessException("对不起,模板格式不匹配,无法完成上传,请下载模板填写并上传!"); } // 获取sheet数据 List<Map<String, String>> dataList = ExcelUtil.getRowList(sheet, 3, 0); // 处理sheet数据 List<String> errorList = new ArrayList<String>(); LOOP: for (int i = 0; i < dataList.size(); i++) { OWKMap params = new OWKHashMap(); Map<String, String> data = dataList.get(i); // 获取excel中分行编号 String branchCode = (String) data.get("0"); // 获取excel中姓名 String certOwner = (String) data.get("1"); // 获取excel中一事通ID String certOwnerID = (String) data.get("2"); // 获取excel中责任条线 String busLine = (String) data.get("3"); // 获取excel中级别 String level = (String) data.get("4"); // 获取excel中认证获取时间 String certDate = (String) data.get("5"); // 分行编号验证 if (StringUtils.isEmpty(branchCode)) { errorList.add(String.format("第%d行制度名称为空。", i + 4)); continue LOOP; } //证书人姓名验证 if (StringUtils.isEmpty(certOwner)) { errorList.add(String.format("第%d行制度级别内容为空或不符合格式。", i + 4)); continue LOOP; } //证书人一事通ID验证 if (StringUtils.isEmpty(certOwnerID)) { errorList.add(String.format("第%d行制度级别内容为空或不符合格式。", i + 4)); continue LOOP; } // 责任条线校验以及翻译 if (StringUtils.isEmpty(busLine)) { errorList.add(String.format("第%d行责任条线内容为空或不符合格式。", i + 4)); continue LOOP; } // 证书级别校验 if (StringUtils.isEmpty(level)) { errorList.add(String.format("第%d行证书级别为空。", i + 4)); continue LOOP; } else if (level.trim().equalsIgnoreCase("初级")) { level = Constants.CERTIFICATE_CERTLEVEL_LOWLEVEL; }else if (level.trim().equalsIgnoreCase("中级")) { level = Constants.CERTIFICATE_CERTLEVEL_MIDDLELEVEL; }else if (level.trim().equalsIgnoreCase("高级")) { level = Constants.CERTIFICATE_CERTLEVEL_HIGHLEVEL; }else { errorList.add(String.format("第%d行证书级别输入级别不对。", i + 4)); continue LOOP; } // 认证获取时间校验 if (StringUtils.isEmpty(certDate)) { errorList.add(String.format("第%d行认证获取时间为空。", i + 4)); continue LOOP; } else if(certDate.length() != 8){ errorList.add(String.format("第%d行认证获取时间输入格式不正确。", i + 4)); continue LOOP; } // 证书录入日期 SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm"); Date today = new Date(); String inputDate = format.format(today); params.put("INPUTDATE", inputDate); params.put("BRANCHNO", branchCode); params.put("CERTOWNER", certOwner); params.put("CERTOWNERID", certOwnerID); String lineName = Mapper.getLineName(busLine); params.put("LINEID", lineName); params.put("LEVEL", level); params.put("CERTDATE", certDate); //获取分行拼音简写,用于生成编号 String branchSpell = Mapper.getBranchSpell(branchCode); params.put("BRANCHSPELL", branchSpell); //首先检查数据库中是否已存在该人员的证书记录,如存在先删除再插入新数据 try { List certList = CertificateService.getInstance().getCertByCertownerID(params); if (certList.size()>0) { CertificateService.getInstance().deleteCertRepeat(params); } CertificateService.getInstance().insertCertificate(params); } catch (BusinessException ex) { ex.printStackTrace(); pRequest.setAttribute("_tipMsg", "证书信息新增失败!" + ex.getMessage()); } } return pMapping.findForward("batchIndex"); }
excelutil的代码:
/** * */ package com.rb.itms.util; /** * * @author HO274755 * */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import com.rb.owk.commons.lang.base.orm.BusinessException; import com.rb.owk.commons.lang.key.KeyGeneratorHelper; /** * EXCEL工具类 * * @author HO274509 * */ public class ExcelUtil { private ExcelUtil() { }; /** * 获取excel对象 * * @param is * @return * @throws BusinessException */ public static Workbook getWorkBook(InputStream is) throws BusinessException { Workbook workBook = null; try { workBook = Workbook.getWorkbook(is); } catch (BiffException e) { throw new BusinessException("生成Excel工作薄出错!"); } catch (IOException e) { throw new BusinessException("读取输入流出错!"); } return workBook; } /** * 获取sheet内容,以行为map对象(key值为列值)组装的数组 * * @param sheet * @return */ public static List<Map<String, String>> getRowList(Sheet sheet) { return getRowList(sheet, 0, 0); } /** * 获取sheet内容,以行为map对象(key值为列值)组装的数组 下标从0开始 * * @param sheet * @return */ @SuppressWarnings("unchecked") public static List<Map<String, String>> getRowList(Sheet sheet, int startRowIndex, int startColumnIndex) { int rowCount = sheet.getRows();// 总行数 int columnCount = sheet.getColumns();// 总列数 List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (int r = startRowIndex; r < rowCount; r++) {// 遍历 Map data = new HashMap<String, String>(); for (int c = startColumnIndex; c < columnCount; c++) { data.put(String.valueOf(c), sheet.getCell(c, r).getContents() .trim()); } result.add(data); } return result; } /** * 把对象数组写到一行excel的不同单元格中 * * @param ws * @param rowNum * @param cells * @throws WriteException * @throws RowsExceededException */ public static void putRows(WritableSheet ws, int rowNum, String[] cells) throws RowsExceededException, WriteException { for (int c = 0; c < cells.length; c++) {// 写一行 Label cell = new Label(c, rowNum, cells[c]); ws.addCell(cell); } } /** * 把对象数组写到一列excel的不同单元格中 * * @param ws * @param rowNum * @param cells * @throws WriteException * @throws RowsExceededException */ public static void putColumns(WritableSheet ws, int columnNum, String[] cells) throws RowsExceededException, WriteException { for (int r = 0; r < cells.length; r++) {// 写一行 Label cell = new Label(columnNum, r, cells[r]); ws.addCell(cell); } } @SuppressWarnings("unchecked") public static void main(String[] args) throws BusinessException, IOException, RowsExceededException, WriteException { InputStream is = new FileInputStream( "E:\\FireFly\\内控风险管理系统\\01文档\\02需求文档\\01客户需求类文档\\1.xls"); Workbook workBook = getWorkBook(is); List<Map<String, String>> rowList = getRowList(workBook.getSheet(0)); // OutputStream os = new FileOutputStream("E:\\xiaolu.txt"); FileWriter writer = new FileWriter("E:\\xiaolu.txt"); BufferedWriter bufferWriter = new BufferedWriter(writer); for (Map row : rowList) { StringBuffer sb = new StringBuffer(); sb.append("\""); sb.append(KeyGeneratorHelper.generateUUIDHex()); sb.append("\","); sb.append("\""); sb.append((String) row.get("0")); sb.append("\","); sb.append("\""); sb.append((String) row.get("1")); sb.append("\","); sb.append("\""); sb.append((String) row.get("2")); sb.append("\"\n"); bufferWriter.write(sb.toString()); } bufferWriter.close(); workBook.close(); // 创建可编辑excel文件 WritableWorkbook writeBook = Workbook.createWorkbook(new File( "E:\\sz.xls")); // 创建sheet页 WritableSheet ws = writeBook.createSheet("深圳用户", 0); String[] title={"员工号","姓名","所在机构","分行代码","网点代码"}; int rowNum = 0; putRows(ws, rowNum, title);//标题 FileReader reader = new FileReader("E:\\sz_users.txt"); BufferedReader bufferReader = new BufferedReader(reader); String value; while ((value = bufferReader.readLine()) != null) { rowNum++; String[] cells = value.split(" "); putRows(ws, rowNum, cells); } writeBook.write(); writeBook.close(); bufferReader.close(); } }
相关推荐
Excel数据解析,自动创建对应C#类,自动创建ScriptableObject生成类,自动序列化Asset文件 功能介绍链接 https://z-c-s.blog.csdn.net/article/details/125608062
之前做的一个外包项目,现公布源码和可执行程序 1、使用qt在pc上面创建、解析excel文件,动态导入到手机 2、从手机导出excel文件到pc并在软件上面打开,修改...3、主要时excel的使用,解析excel数据,需要的可以看看
在.NET框架中,导入Excel数据到数据库是一项常见的任务,它涉及到文件上传、Excel数据解析以及数据库操作。以下是对这一过程的详细阐述。 首先,我们需要理解.NET中的文件上传机制。这通常涉及用户通过Web表单或者...
本主题聚焦于如何使用Python语言将Excel数据解析并转化为proto、IDL(Interface Definition Language)或struct格式。这三种格式各有其特点和用途,通常在分布式系统、网络通信以及数据序列化中扮演重要角色。 1. *...
本文将深入探讨如何利用Java和Apache POI来高效地解析百万行的Excel数据。 首先,理解Excel文件的结构至关重要。Excel 2007及以上版本(.xlsx格式)使用了基于OpenXML标准的ZIP文件结构,这使得文件可以被分割成多...
在Java编程环境中,将Excel数据解析并上传到MySQL数据库是一项常见的任务,特别是在数据处理和导入导出场景下。本项目提供了完整的解决方案,包括所需的jar包、数据库SQL语句以及一个可直接在Eclipse环境中运行的...
**解析Excel数据的基本步骤如下:** 1. **添加依赖**:首先,在你的项目中引入Poi库。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.poi <artifactId>poi <version>4.1.2 ...
该项目是一款基于SpringBoot、JDBC、Mybatis和EasyExcel的Java Excel批量导入导出解决方案...该系统适用于实现高效的Excel数据处理,支持SpringBoot框架和Mybatis持久层技术,并通过EasyExcel实现Excel的快速读写操作。
在Spring Boot框架中,实现Excel文件的解析是一个常见的需求,特别是在数据导入、导出或数据分析的应用场景中。本文将深入探讨如何使用Spring Boot结合Java来处理Excel文件。 首先,我们需要引入处理Excel文件的库...
本项目特别强调“判断解析的数据类型”,这意味着在处理Excel数据时,开发者可能着重于检查每个单元格的数据是否符合预期的类型,以确保后续处理的正确性。例如,如果一个单元格应该存储日期,但实际包含的是文本,...
1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....
在Java编程中,解析Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Excel文件格式主要有两种:老式的`.xls`(基于BIFF格式)和较新的`.xlsx`(基于Open XML标准)。本篇将详细介绍如何...
解析出Excel数据后,下一步是将这些数据存入数据库。这通常涉及到JDBC或ORM框架如Hibernate。如果你选择JDBC,可以创建PreparedStatement来执行SQL语句,将解析出的数据插入到对应的数据库表中。例如: ```java ...
本教程将详细介绍如何使用Apache POI库将Excel数据解析为JavaBean对象。 首先,我们有两个关键的Java类:`NewModel.java` 和 `ExcelHead.java`。`NewModel.java` 应该是定义了与Excel工作表列对应的JavaBean。这个...
`tableCJ`可能是实现此功能的自定义JavaScript代码,可能包含了对Excel数据解析和页面表格操作的逻辑。 1. **jQuery**:在这个项目中,jQuery被用来操作DOM(文档对象模型)元素,如选取表格元素、添加和删除表格行...
function readExcel(file_obj){ var myIndex = layer.load(2, { shade : [ 0.3, '#C8C8C8' ] }); var reader = new FileReader(); var file = file_obj.files[0]; reader.readAsBinaryString(file); reader...
2. **Excel数据解析**:Java提供了强大的API,如Apache POI库,用于读取和操作Excel文件。通过这些API,可以解析Excel的工作表,获取每一行和每一列的数据。项目中,Flex前端上传的Excel文件会被Java后端解析,找到...
标题中的“上传下载EXCEL与解析”涉及到的IT知识点主要集中在Excel文件的处理,这通常包括文件的上传、下载操作以及对Excel数据的解析。在Web应用开发中,这些功能非常常见,例如在数据分析、报表生成或者用户交互...
在大数据处理领域,高效地解析Excel文件是一项关键任务,尤其是当面对海量数据时。Apache POI是一个流行的开源库,专门用于读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇将深入探讨如何利用...
在前端开发中,有时我们...总结,使用`js-xlsx`库,前端开发者可以轻松地实现Excel文件的读取和解析,从而在网页上实现与Excel数据的交互。通过熟练掌握这个库,你可以构建功能丰富的数据导入导出功能,提升用户体验。