Open PI-KA-CHU opened 6 years ago
// 创建工作簿 HSSFWorkbook wb = new HSSFWorkbook(); // 创建工作表 HSSFSheet sheet = wb.createSheet(); // 设置工作表的索引行的宽度,15 * 256表示15个字符宽度 sheet.setColumnWidth(0, 15 * 256); sheet.setColumnWidth(1, 15 * 256); sheet.setColumnWidth(2, 15 * 256); sheet.setColumnWidth(3, 15 * 256); // 设置表格格式 HSSFCellStyle style = wb.createCellStyle(); // 设置字体 HSSFFont font = wb.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 12); // 设置单元格类型 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); style.setFont(font); style.setWrapText(true); // 合并起止行0,0,起止列0,3单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3)); // 创建行 HSSFRow row0 = sheet.createRow(0); row0.setHeight((short) 600); // 在行中创建单元格,并设置内容及格式 HSSFCell cell0 = row0.createCell(0); cell0.setCellValue("七彩评价社团信息"); cell0.setCellStyle(style); // 通过获取的list数据在表格中进行填充数据 for (LeagueMemberDto stu : list) { HSSFRow rowX = sheet.createRow(num++); cell = rowX.createCell(0); cell.setCellValue(stu.getName()); cell.setCellStyle(style); } /** 若要为创建的工作簿进行下载,可以先下载到服务器(也可以不用),再由客户端下载 **/ // 文件下载的地址(服务器) String upLoadPath = request.getSession().getServletContext().getRealPath("/") + "/download/athleteFile/"; String filePath = upLoadPath + fileName; // 创建下载的文件夹 File dirFile = new File(upLoadPath); if (!dirFile.exists() || !dirFile.isDirectory()) { dirFile.mkdirs(); } // (在服务器) 生成文件 workbook.write(new FileOutputStream(filePath)); // 下载文件 FileUtil.download(filePath, fileName + ".xls", request, response, false);
excel文件下载时可以直接获取response的getOutputStream()进行文件流的输出,再设置response的相关头信息即可实现浏览器下载,代码如下:
String fileName = "人员信息.xls"; // 更换文件名的编码格式,否则在浏览器无法正常显示 fileName = response.encodeURL(new String(fileName.getBytes("utf-8"), "iso8859-1")); response.reset(); // 清空输出流 response.setContentType("application/vnd.ms-excel;charset=utf-8\""); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream);
JAR包支持:
ERROR提醒:
前端在使用form进行input文件的上传时,需要为相应input设置name属性,否则无法正常上传
将input标签加上multiple属性表示可上传多个文件
小数字符串转化为整型:转换为Int类型String num ="1.00"; int abc =Double.valueOf(num).intValue();
前端: 使用jquery实现同一个form中,不同按钮使用不用servlet进行处理,代码如下:
<form action="../ExcelImportServlet" method="post" enctype="multipart/form-data" id="handle" name="handle"> <div class="input-group"> <div class="custom-file"> <input type="file" class="custom-file-input" id="inputGroupFile04" name="file" multiple> <label class="custom-file-label" for="inputGroupFile04">Choose file</label> </div> <div class="input-group-append"> <button class="btn btn-outline-secondary" onclick="$.handler.uploadExcel()">upload</button> </div> <div class="input-group-append"> <button class="btn btn-outline-secondary" onclick="$.handler.download()">download</button> </div> </div> </form> <script type="text/javascript"> $(function() { $.handler = { download: function() { $("#handle").attr("action","../ExcelDownloadServlet"); }, uploadExcel: function() { $("#handle").attr({ action : "../ExcelImportServlet", method : "post", enctype: "multipart/form-data" }); } } }) </script> 调用:<button class="btn btn-outline-secondary" onclick="$.handler.uploadExcel()">upload</button>
后端: excel文件导入时前端可以使用form表单上传文件(将input标签加上multiple属性表示可上传多个文件),同时需要将form表单属性设置为: enctype="multipart/form-data",上传后使用Apache文件上传组件处理文件上传,代码如下:
public static int importExcel(HttpServletRequest request) { // 使用Apache文件上传组件处理文件上传步骤: // 为解析类提供配置信息 DiskFileItemFactory factory = new DiskFileItemFactory(); // 创建解析类的实例 ServletFileUpload sfu = new ServletFileUpload(factory); // 设置单个上传的文件大小 sfu.setFileSizeMax(1024 * 1024 * 5); //设置总上传文件的文件大小 sfu.setSizeMax(1024 * 1024 * 50); try { List<UserDto> userLists = new ArrayList<>(); List<FileItem> fileItems = sfu.parseRequest(request); System.out.println("FileItem的数目为:" + fileItems.size()); for (FileItem item : fileItems) { if (item.isFormField()) { } else { String fileName = item.getName(); String fileType = fileName.substring(fileName.lastIndexOf(".")); System.out.println("文件名后缀为:" + fileName); if (fileType.equals(".xls") || fileType.equals(".xlsx")) { InputStream is = item.getInputStream(); HSSFWorkbook workbook = new HSSFWorkbook(is); HSSFSheet sheet; HSSFRow row; System.out.println("工作簿的表数为:" + workbook.getNumberOfSheets()); // 遍历工作表 for (int i = 0; i < workbook.getNumberOfSheets(); i++) { sheet = workbook.getSheetAt(i); System.out.println("工作表的行数为:" + sheet.getLastRowNum()); // 遍历行 for (int j = sheet.getFirstRowNum() + 1; j <= sheet.getLastRowNum(); j++) { UserDto user = new UserDto(); row = sheet.getRow(j); user.setId(Double.valueOf(row.getCell(0).toString()).intValue()); user.setName(row.getCell(1).toString().trim()); user.setSex(row.getCell(2).toString().trim()); user.setEmail(row.getCell(3).toString().trim()); user.setTelephone(row.getCell(4).toString().trim()); userLists.add(user); } // 将读取的数据导入数据库 DBBean.insertUserExcelToDB(userLists); } } else { return -1; } } } } catch (FileUploadException e) { logger.debug(e.getMessage(), e); return 0; } catch (IOException e) { logger.debug(e.getMessage(), e); return 0; } return 1; }
JAVA Excel表格学习笔记:
EXCEL文件下载:
excel文件下载时可以直接获取response的getOutputStream()进行文件流的输出,再设置response的相关头信息即可实现浏览器下载,代码如下:
EXCEL文件导入:
JAR包支持:
ERROR提醒:
前端在使用form进行input文件的上传时,需要为相应input设置name属性,否则无法正常上传
将input标签加上multiple属性表示可上传多个文件
小数字符串转化为整型:转换为Int类型String num ="1.00"; int abc =Double.valueOf(num).intValue();
前端: 使用jquery实现同一个form中,不同按钮使用不用servlet进行处理,代码如下:
后端: excel文件导入时前端可以使用form表单上传文件(将input标签加上multiple属性表示可上传多个文件),同时需要将form表单属性设置为: enctype="multipart/form-data",上传后使用Apache文件上传组件处理文件上传,代码如下: