java Excel 导入

xiaoxiao2021-02-28  30

页面Html

引入JS ajaxfileupload.js

<script src="statistics/js/ajaxfileupload.js " type="text/javascript " charset="utf-8 "></script>

JS代码

这里要注意fileElementId : ['uploadFile'], 方括号中的值是type='file'的文本域的id。

Controller 层方法

以下两工具类

public class UploadUtil {

private static final Logger log = Logger.getLogger(UploadUtil.class); /** * 字符集编码格式 */ private final static String CODE = "UTF-8"; public static List<String> uploadFile(HttpServletRequest request){ List<String> reLs = null; String savePath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload"); File file = new File(savePath); // 判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { log.info(savePath + "目录不存在,需要创建"); // 创建目录 file.mkdir(); } try { // 使用Apache文件上传组件处理文件上传步骤: // 1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); // 解决上传文件名的中文乱码 upload.setHeaderEncoding(CODE); // 3、判断提交上来的数据是否是上传表单的数据 if (!ServletFileUpload.isMultipartContent(request)) { // 按照传统方式获取数据 return reLs; } // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项 reLs = new ArrayList<String>(); List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) { String oldFileName = ""; // 如果fileitem中封装的是普通输入项的数据 if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(CODE); log.info(name + ":" + value); } // 如果fileitem中封装的是上传文件 else { // 得到上传的文件名称, String filename = item.getName(); if (filename == null || filename.trim().equals("")) { continue; } /** * 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt * 处理获取到的上传文件的文件名的路径部分,只保留文件名部分 */ filename = filename.substring(filename.lastIndexOf("\\") + 1); // 获取item中的上传文件的输入流 InputStream in = item.getInputStream(); // 创建一个文件输出流 log.info("文件创建的目录内------------------------------------------"); String extension = filename.lastIndexOf(".") == -1 ? "" : filename.substring(filename.lastIndexOf(".") + 1); oldFileName = filename; filename = System.currentTimeMillis() + "." + extension; log.info(savePath + "/" + filename); FileOutputStream out = new FileOutputStream(savePath + "/" + filename); // 创建一个缓冲区 byte buffer[] = new byte[1024]; // 判断输入流中的数据是否已经读完的标识 int len = 0; // 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while ((len = in.read(buffer)) > 0) { // 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" // + filename)当中 out.write(buffer, 0, len); } // 关闭输入流 in.close(); // 关闭输出流 out.close(); // 删除处理文件上传时生成的临时文件 item.delete(); reLs.add(filename + "," + oldFileName); } } } catch (Exception e) { log.error("文件上传失败!", e); } finally { log.info("文件上传成功!"); } return reLs; }

}

 

public final class ExcelUtil { /** * 对外提供读取excel 的方法 */ public static List<List<Object>> readExcel(File file) throws IOException { String fileName = file.getName(); String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName.substring(fileName.lastIndexOf(".") + 1); if ("xls".equals(extension)) { return read2003Excel(file); } else if ("xlsx".equals(extension)) { return read2007Excel(file); } else { throw new IOException("不支持的文件类型"); } } /** * 读取 office 2003 excel *  * @throws IOException * @throws FileNotFoundException */ private static List<List<Object>> read2003Excel(File file) throws IOException { List<List<Object>> list = new LinkedList<List<Object>>(); HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file)); HSSFSheet sheet = hwb.getSheetAt(0); Object value = null; HSSFRow row = null; HSSFCell cell = null; for (int i = sheet.getFirstRowNum(); i <= sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row == null) { continue; } List<Object> linked = new LinkedList<Object>(); for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell == null) { continue; } DecimalFormat df = new DecimalFormat("0");// 格式化 number String switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: // System.out.println(i + "行" + j + " 列 is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: if((cell.getNumericCellValue() + "").indexOf(".") > -1 &&  cell.getNumericCellValue() != 0.0 &&  !(cell.getNumericCellValue() + "").endsWith(".0") && (cell.getNumericCellValue() + "").indexOf("E")==-1){ value = cell.getNumericCellValue(); } else{ value = df.format(cell.getNumericCellValue()); } break; case XSSFCell.CELL_TYPE_BOOLEAN: value = cell.getBooleanCellValue(); break; case XSSFCell.CELL_TYPE_BLANK: value = ""; break; default: value = cell.toString(); } if (value == null || "".equals(value)) { continue; } linked.add(value); } list.add(linked); } return list; } /** * 读取Office 2007 excel */ private static List<List<Object>> read2007Excel(File file) throws IOException { List<List<Object>> list = new LinkedList<List<Object>>(); // String path = System.getProperty("user.dir") + // System.getProperty("file.separator")+"dd.xlsx"; // System.out.println("路径:"+path); // 构造 XSSFWorkbook 对象,strPath 传入文件路径 XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file)); // 读取第一章表格内容 XSSFSheet sheet = xwb.getSheetAt(0); Object value = null; XSSFRow row = null; XSSFCell cell = null; int firstCellNum = 0; //获取列数,比最后一列列标大1 int lastCellNum = sheet.getRow(0).getLastCellNum() - 1; for (int i = sheet.getFirstRowNum(); i <= sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row == null) { continue; } List<Object> linked = new LinkedList<Object>(); int k =0; for (int j = firstCellNum; j <= lastCellNum; j++) { cell = row.getCell(j); if (cell == null) { linked.add(""); k++; } else { DecimalFormat df = new DecimalFormat("0");// 格式化 number String switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: if((cell.getNumericCellValue() + "").indexOf(".") > -1 &&  cell.getNumericCellValue() != 0.0 &&  !(cell.getNumericCellValue() + "").endsWith(".0") && (cell.getNumericCellValue() + "").indexOf("E")==-1){ value = cell.getNumericCellValue(); } else{ value = df.format(cell.getNumericCellValue()); } break; case XSSFCell.CELL_TYPE_BOOLEAN: // System.out.println(i + "行" + j + " 列 is Boolean type"); value = cell.getBooleanCellValue(); break; case XSSFCell.CELL_TYPE_BLANK: value = ""; break; default: value = cell.toString(); } if (value == null || "".equals(value)) { value = ""; k++; } linked.add(value); } } if(k == (lastCellNum - firstCellNum + 1)) { continue; } list.add(linked); } file.delete(); return list; } }

转载请注明原文地址: https://www.6miu.com/read-2622505.html

最新回复(0)