自己没事整理了 io和转Excel的方法和工具类 希望对有需求的朋友有所帮助.
1
public class ExcelWrite { private static HSSFWorkbook workbook = null; /** * 判断文件是否存在. * @param fileDir 文件路径 * @return */ public static boolean fileExist(String fileDir){ boolean flag = false; File file = new File(fileDir); flag = file.exists(); return flag; } /** * 判断文件的sheet是否存在. * @param fileDir 文件路径 * @param sheetName 表格索引名 * @return */ public static boolean sheetExist(String fileDir,String sheetName) throws Exception{ boolean flag = false; File file = new File(fileDir); if(file.exists()){ //文件存在 //创建workbook try { workbook = new HSSFWorkbook(new FileInputStream(file)); //添加Worksheet(不添加sheet时生成的xls文件打开时会报错) HSSFSheet sheet = workbook.getSheet(sheetName); if(sheet!=null) flag = true; } catch (Exception e) { throw e; } }else{ //文件不存在 flag = false; } return flag; } /** * 创建新excel. * @param fileDir excel的路径 * @param sheetName 要创建的表格索引 * @param titleRow excel的第一行即表格头 */ public static void createExcel(String fileDir,String sheetName,String titleRow[]) throws Exception{ //创建workbook workbook = new HSSFWorkbook(); //添加Worksheet(不添加sheet时生成的xls文件打开时会报错) HSSFSheet sheet1 = workbook.createSheet(sheetName); //新建文件 FileOutputStream out = null; try { //添加表头 HSSFRow row = workbook.getSheet(sheetName).createRow(0); //创建第一行 for(short i = 0;i < titleRow.length;i++){ HSSFCell cell = row.createCell(i); cell.setCellValue(titleRow[i]); } out = new FileOutputStream(fileDir); workbook.write(out); } catch (Exception e) { throw e; } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 删除文件. * @param fileDir 文件路径 */ public static boolean deleteExcel(String fileDir) { boolean flag = false; File file = new File(fileDir); // 判断目录或文件是否存在 if (!file.exists()) { // 不存在返回 false return flag; } else { // 判断是否为文件 if (file.isFile()) { // 为文件时调用删除文件方法 file.delete(); flag = true; } } return flag; } /** * 往excel中写入(已存在的数据无法写入). * @param fileDir 文件路径 * @param sheetName 表格索引 * @param mapList * @throws Exception */ public static void writeToExcel(String fileDir,String sheetName,List<Map> mapList) throws Exception{ //创建workbook File file = new File(fileDir); try { workbook = new HSSFWorkbook(new FileInputStream(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //流 FileOutputStream out = null; HSSFSheet sheet = workbook.getSheet(sheetName); // 获取表格的总行数 // int rowCount = sheet.getLastRowNum() -1; // 需要减一 // 获取表头的列数 int columnCount = sheet.getRow(0).getLastCellNum()-1; try { // 获得表头行对象 HSSFRow titleRow = sheet.getRow(0); if(titleRow!=null){ for(int rowId=0;rowId<mapList.size();rowId++){ Map map = mapList.get(rowId); HSSFRow newRow=sheet.createRow(rowId+1); for (short columnIndex = 0; columnIndex < columnCount; columnIndex++) { //遍历表头 String mapKey = titleRow.getCell(columnIndex).toString().trim().toString().trim(); HSSFCell cell = newRow.createCell(columnIndex); cell.setCellValue(map.get(mapKey)==null ? null : map.get(mapKey).toString()); } } } out = new FileOutputStream(fileDir); workbook.write(out); } catch (Exception e) { throw e; } finally { out.close(); } } }
该类是对Excel进行处理的方法 是从网上找到的 但是 在实际运用中 // int rowCount = sheet.getLastRowNum() -1; // 需要减一 我这里是需要减一的 而网上方法为加1
2
public class ExcleHelper { public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) { ExportParams exportParams = new ExportParams(title, sheetName); exportParams.setCreateHeadRows(isCreateHeader); defaultExport(list, pojoClass, fileName, response, exportParams); } public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) { defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName)); } public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) { defaultExport(list, fileName, response); } private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) { Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); if (workbook != null) ; downLoadExcel(fileName, response, workbook); } private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) { try { response.setCharacterEncoding("UTF-8"); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); workbook.write(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) { Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF); if (workbook != null) ; downLoadExcel(fileName, response, workbook); } public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass) { if (StringUtils.isBlank(filePath)) { return null; } ImportParams params = new ImportParams(); params.setTitleRows(titleRows); params.setHeadRows(headerRows); List<T> list = null; try { list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params); } catch (Exception e) { e.printStackTrace(); } return list; } public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) { if (file == null) { return null; } ImportParams params = new ImportParams(); params.setTitleRows(titleRows); params.setHeadRows(headerRows); List<T> list = null; try { list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params); } catch (Exception e) { e.printStackTrace(); } return list; } }
该类是web环境下 对Excel进行操作的工具类 收藏下
3
public static <T> T toBean(String text, Class<T> clazz) { return JSON.parseObject(text, clazz); }
json字符串转化为实体类
4
public static Map<String, Object> objectToMap(Object obj) throws Exception { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; }
实体类转换为map 集合
5
public class Doc { private String id; private String name;
}
对应实体类 进行json的解析 和转换为Excel
6 进行处理
// 此处用BufferedReader 避免有换行等问题
BufferedReader bre = null; try { // 读取json数据的路径 String file = "F:\\doc.txt"; String str = ""; Items o; bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流 加强 List<Map> list = new ArrayList<Map>(); while ((str = bre.readLine()) != null) // 判断最后一行不存在,为空结束循环 { // 此方法就是上面json字符串转换为实体类 o = FastJsonHelper.toBean(str, Items.class); List<Doc> personList = o.getItems(); //指定生成Excel位置 String filePath = "F:/my/text.xls"; String[] title = {"id", "name"}; try { Map<String, Object> map = ExcelWrite.objectToMap(o); for (Doctober s : personList) { Map<String, Object> maps = ExcelWrite.objectToMap(s); list.add(maps); } // 创建Excel表 ExcelWrite.createExcel(filePath, "sheet1", title); // 导入数据 ExcelWrite.writeToExcel(filePath, "sheet1", list); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); }
其中list<Doc> 是json中如果集合 进行处理的