poi导入excel
来源:互联网 发布:淘宝买家数据 编辑:程序博客网 时间:2024/06/14 14:01
使用poi进行导入导出excel是我们开发中常见的应用场景!
导入必要的jar包
创建读取excel的工具类–ExcelUtils
public class ExcelUtils { /** * 读取excel文件 * * @param in * @param * @return * @throws Exception */ public static List<LineDownOrder> getBankListByExcel(InputStream in) throws Exception { List<LineDownOrder> lineDownOrders = new ArrayList<>(); //创建Excel工作薄 Workbook work = getWorkbook(in); if (null == work) { throw new Exception("创建Excel工作薄为空!"); } Sheet sheet = null; Row row = null; Cell cell = null; //遍历Excel中所有的sheet for (int i = 0; i < work.getNumberOfSheets(); i++) { sheet = work.getSheetAt(i); if (sheet == null) { continue; } //遍历当前sheet中的所有行 for (int j =1; j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if (row == null ) { continue; } LineDownOrder lineDownOrder = new LineDownOrder(); //把每个单元格的值付给对象的对应属性 if (row.getCell(0)!=null){ lineDownOrder.setInsureNo(String.valueOf(getCellValue(row.getCell(0)))); } if (row.getCell(1)!=null){ lineDownOrder.setPayMoney(String.valueOf(getCellValue(row.getCell(1)))); } if (row.getCell(2)!=null){ lineDownOrder.setPayType(String.valueOf(getCellValue(row.getCell(2)))); } if (row.getCell(3)!=null){ lineDownOrder.setRepaymentPerson(String.valueOf(getCellValue(row.getCell(3)))); } if (row.getCell(4)!=null){ lineDownOrder.setRepaymentType(String.valueOf(getCellValue(row.getCell(4)))); } if (row.getCell(5)!=null){ lineDownOrder.setPayTime(String.valueOf(getCellValue(row.getCell(5)))); } if (row.getCell(6)!=null){ lineDownOrder.setTradeNo(String.valueOf(getCellValue(row.getCell(6)))); } //遍历所有的列(把每一行的内容存放到对象中) lineDownOrders.add(lineDownOrder); } } return lineDownOrders; } /** * * @param inStr * @return * @throws Exception */ public static Workbook getWorkbook(InputStream inStr) throws Exception { Workbook wb = null; wb = WorkbookFactory.create(inStr); return wb; } /** * 描述:对表格中数值进行格式化 * * @param cell * @return */ public static Object getCellValue(Cell cell) { Object value = null; DecimalFormat df = new DecimalFormat("0"); //格式化number String字符 SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化 DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: value = cell.getRichStringCellValue().getString(); break; case Cell.CELL_TYPE_NUMERIC: if ("General".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) { value = sdf.format(cell.getDateCellValue()); } else { value = df2.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: value = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_BLANK: value = ""; break; default: break; } return value; }}
注意:上面我写的这个不是通用的,只是针对于我做的一个excel模版来读取的,把读取到的值赋值到实体bean里,然后放入到,集合。之后传到业务层,根据里面的字段来更新数据库一些表的状态,信息。我这里的应用场景比较简单,就采用了这种方法。
使用WorkbookFactory来创建工作薄,同时兼容excel的.xls以及.xlsx格式。
wook: 工作薄,其实就是一个excel文件。
sheet: 工作表,一个excel可能有多个表。
Row: 列,每一列。
cell: 单元格。excel的最小单位。 .
在读取的时候可以把每一行看作一个实体bean,在遍历行的时候进行赋值。之后放入集合中。
上传的页面比较简单,一个标准的上传标签。
<form id="uploadForm" enctype="multipart/form-data" action="#"> <table> <tr> <td style="width: 10%"> <input class="file" id="upfile" type="file" name="upfile"/> </td> </tr> <tr> <td style="width: 15%"> <input class="btn btn-primary btn-md" type="button" value="导入" id="upLoadPayerCreditInfoExcel" name="btn"/> </td> </tr> </table></form>
我这里使用ajax请求传递文件
<script type="text/javascript"> // <![CDATA[ $('#upLoadPayerCreditInfoExcel').click(function () { if (checkData()) { var formData = new FormData(); formData.append("upfile", document.getElementById("upfile").files[0]); $.ajax({ url: , type: "post", data: formData, contentType: false, processData: false, success: function (data) { alert(data.status); }, }); } }); //JS校验form表单信息 function checkData() { var fileDir = $("#upfile").val(); var suffix = fileDir.substr(fileDir.lastIndexOf(".")); if ("" == fileDir) { alert("选择需要导入的Excel文件!"); return false; } if (".xls" != suffix && ".xlsx" != suffix) { alert("选择Excel格式的文件导入!"); return false; } return true; } // ]]></script>
后台controller层可以用 MultipartFile来接收文件。
/** * 读取excel更新数据 * * @param upfile * @param * @param * @throws Exception */ @RequestMapping(value = "/readExcel") @Transactional public Map<String, String> readExcel(MultipartFile upfile) throws Exception { HashMap<String, String> map = new HashMap<>(); InputStream in = upfile.getInputStream(); //读取excel中的内容 List<LineDownOrder> lineDownOrders = ExcelUtils.getBankListByExcel(in); String s = orderService.updateByExcel(lineDownOrders); map.put("status", s); return map; }
最后,在这里温馨提示大家,excel里面的数据格式调整为文本比较好,这样都会以string类型去读取,后台代码比较好控制。
阅读全文
0 0
- poi 导入excel源码
- POI导入excel出错
- 使用POI 导入excel
- POI导入Excel
- excel导入(poi)
- poi导入导出excel
- poi excel导入导出
- poi 导入 Excel
- POI实现excel导入
- java poi 导入excel
- 使用poi 导入 excel
- poi导入excel
- POI数据导入Excel
- poi之excel导入
- POI方法导入Excel
- POI导入/导出 EXCEL
- POI Excel导入导出
- Java poi+excel导入
- 关于ckfinder+ckeditor 图片上传路径问题
- 如何使用ABBYY FineReader 14添加文本到PDF文档
- Linux常见命令
- 详细解析Java中抽象类和接口的区别
- RocketMQ实战(一)
- poi导入excel
- 过滤器、ActionResult特性、数据传输
- CUDA内存拷贝
- mysql大事务带来的问题
- MyEclipse创建自定义HTML5,JSP模板
- Ubantu下安装软件的问题
- JNI: Java类中静态和非静态方法的区别
- Java Timer 定时任务实现原理及缺陷分析
- Windows下安装Ubantu双系统以及常见问题