//ExcelHelper .java import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.nsn.entity.ExcelRowVo; import com.nsn.entity.NameLikeExcel; /** * excel帮助类 * @author zhujian * */ public class ExcelHelper { // private static Logger logger = Logger.getLogger(ExcelHelper.class); private static final String OFFICE_EXCEL_2003_POSTFIX = "xls"; private static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx"; private static final String EMPTY = ""; private static final String POINT = "."; public static final String NOT_EXCEL_FILE = " : Not the Excel file!"; public static final String PROCESSING = "Processing..."; /** * 解析以".xls"".xlsx"后缀的excel * @param readPath excel路径 * @param ExcelVoClass 实体类的Class * @param cellNum 数据列的数量 * @return 实体类的集合 * @throws IOException * @throws InstantiationException * @throws IllegalAccessException */ public List<ExcelRowVo> readExcel(String readPath, Class ExcelVoClass, int cellNum) throws IOException, InstantiationException, IllegalAccessException { return readExcel(readPath, ExcelVoClass, cellNum, 0, 0); } /** * 解析以".xls"".xlsx"后缀的excel * @param readPath excel路径 * @param ExcelVoClass 实体类的Class * @param cellNum 数据列的数量 * @param startRowNum 数据记录行的索引,从零行开始 * @return 实体类的集合 * @throws IOException * @throws InstantiationException * @throws IllegalAccessException */ public List<ExcelRowVo> readExcel(String readPath, Class ExcelVoClass, int cellNum, int startRowNum) throws IOException, InstantiationException, IllegalAccessException { return readExcel(readPath, ExcelVoClass, cellNum, startRowNum, 0); } /** * 解析以".xls"".xlsx"后缀的excel * @param readPath excel路径 * @param ExcelVoClass 实体类的Class * @param cellNum 数据列的数量 * @param startRowNum 数据记录行的索引,从零行开始 * @param startCellNum 数据记录列的索引,从零列开始 * @return 实体类的集合 * @throws IOException * @throws InstantiationException * @throws IllegalAccessException */ public List<ExcelRowVo> readExcel(String readPath, Class ExcelVoClass, int cellNum, int startRowNum, int startCellNum) throws IOException, InstantiationException, IllegalAccessException { if (null == readPath || EMPTY.endsWith(readPath) || null == ExcelVoClass || cellNum <= 0) { return null; } else { String postfix = getPostfix(readPath); if (!EMPTY.equals(postfix)) { if (OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) { return readXls(readPath, ExcelVoClass, cellNum, startRowNum, startCellNum); } else if (OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) { return readXlsx(readPath, ExcelVoClass, cellNum, startRowNum, startCellNum); } } else { System.out.println(readPath + NOT_EXCEL_FILE); } } return null; } /** * 解析".xls"结束的excel * @param readPath excel路径 * @param ExcelVoClass 实体类的Class * @param cellNum 数据列的数量 * @param startRowNum 数据记录行的索引,从零行开始 * @param startCellNum 数据记录列的索引,从零列开始 * @return 实体类的集合 * @throws IOException * @throws InstantiationException * @throws IllegalAccessException */ private List<ExcelRowVo> readXls(String readPath, Class ExcelVoClass, int cellNum, int startRowNum, int startCellNum) throws IOException, InstantiationException, IllegalAccessException { System.out.println(PROCESSING + readPath); InputStream is = new FileInputStream(readPath); HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); ExcelRowVo vo = null; String[] values = null; List<ExcelRowVo> list = new ArrayList<ExcelRowVo>(); // Read the Sheet for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) { HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet); if (hssfSheet == null) { continue; } // Read the Row for (int rowNum = startRowNum; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { HSSFRow hssfRow = hssfSheet.getRow(rowNum); if (hssfRow != null) { vo = (ExcelRowVo) ExcelVoClass.newInstance(); values = new String[cellNum]; for (int index = startCellNum; index < cellNum; index++) { values[index] = getValue(hssfRow.getCell(index)); } vo.setValues(values); list.add(vo); } } } return list; } /** * 解析".xlsx"结束的excel * @param readPath excel路径 * @param ExcelVoClass 实体类的Class * @param cellNum 数据列的数量 * @param startRowNum 数据记录行的索引,从零行开始 * @param startCellNum 数据记录列的索引,从零列开始 * @return 实体类的集合 * @throws IOException * @throws InstantiationException * @throws IllegalAccessException */ private List<ExcelRowVo> readXlsx(String readPath, Class ExcelVoClass, int cellNum, int startRowNum, int startCellNum) throws IOException, InstantiationException, IllegalAccessException { System.out.println(PROCESSING + readPath); InputStream is = new FileInputStream(readPath); XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); ExcelRowVo vo = null; String[] values = null; List<ExcelRowVo> list = new ArrayList<ExcelRowVo>(); // Read the Sheet for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) { XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet); if (xssfSheet == null) { continue; } // Read the Row for (int rowNum = startRowNum; rowNum <= xssfSheet.getLastRowNum(); rowNum++) { XSSFRow xssfRow = xssfSheet.getRow(rowNum); if (xssfRow != null) { vo = (ExcelRowVo) ExcelVoClass.newInstance(); values = new String[cellNum]; for (int index = startCellNum; index < cellNum; index++) { values[index] = getValue(xssfRow.getCell(index)); } vo.setValues(values); list.add(vo); } } } return list; } /** * ".xlsx"结束的excel的列值 * @param xssfCell XSSFCell * @return String */ @SuppressWarnings("static-access") private String getValue(XSSFCell xssfCell) { if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) { return String.valueOf(xssfCell.getBooleanCellValue()); } else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) { return String.valueOf(xssfCell.getNumericCellValue()); } else { return String.valueOf(xssfCell.getStringCellValue()); } } /** * ".xls"结束的excel的列值 * @param hssfCell HSSFCell * @return String */ @SuppressWarnings("static-access") private String getValue(HSSFCell hssfCell) { if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { return String.valueOf(hssfCell.getNumericCellValue()); } else { return String.valueOf(hssfCell.getStringCellValue()); } } /** * get postfix of the path * * @param path * @return */ private static String getPostfix(String path) { if (path == null || EMPTY.equals(path.trim())) { return EMPTY; } if (path.contains(POINT)) { return path.substring(path.lastIndexOf(POINT) + 1, path.length()); } return EMPTY; } /** * 写入以".xlsx"后缀的excel * @param writePath 输出路径 * @throws IOException */ public void writeExcel(String[] heads, List<ExcelRowVo> listData, String writePath) throws IOException { XSSFWorkbook workBook = new XSSFWorkbook(); XSSFSheet xssfSheet = workBook.createSheet(); Font font = createFonts(workBook); getHead(workBook, xssfSheet, heads, font); // 第二行开始记录数据 int l = 1; for (int i = 0; i < listData.size(); i++) { XSSFRow xssRow = xssfSheet.createRow(l++); ExcelRowVo vo = listData.get(i); String[] values = vo.getValues(); for (int j = 0; j < values.length; j++) { XSSFCell xssfCell = xssRow.createCell(j); xssfCell.setCellValue(values[j]); } } FileOutputStream out = new FileOutputStream(writePath); workBook.write(out); workBook.close(); System.out.println("Processing..." + writePath); } /** * 表头——可根据实际情况重载方法 * @param xssfSheet excel页 * @param heads 表头名称 * @param font style * @return 表头行 */ private void getHead(XSSFWorkbook workBook, XSSFSheet xssfSheet, String[] heads, Font font) { XSSFRow xssRow = xssfSheet.createRow(0); CellStyle cellStyle = workBook.createCellStyle(); cellStyle.setFont(font); cellStyle.setFillPattern(CellStyle.FINE_DOTS ); cellStyle.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.index); cellStyle.setFillForegroundColor(IndexedColors.YELLOW.index); for (int i = 0; i < heads.length; i++) { XSSFCell xssfCell = xssRow.createCell(i); xssfCell.setCellValue(heads[i]); xssfCell.setCellStyle(cellStyle); } } public Font createFonts(XSSFWorkbook workBook){ Font font = workBook.createFont(); font.setFontName("宋体"); // //设置字体颜色-yellow // font.setColor((short) 43); // //cell高度 // font.setFontHeight((short) 2000); // //加粗 // font.setBold(false); // //斜体 // font.setItalic(false); return font; } /** * @param args * @throws IllegalAccessException * @throws InstantiationException */ public static void main(String[] args) throws InstantiationException, IllegalAccessException { // String path = "lib/student_info.xlsx"; String path = "名称模糊匹配.xlsx"; try { ExcelHelper help = new ExcelHelper(); List<ExcelRowVo> list = help .readExcel(path, NameLikeExcel.class, 5, 1); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i).getValuesToString()); NameLikeExcel bean = (NameLikeExcel) list.get(i); bean.setPoiName("POI名称"); } String[] heads = new String[]{"名称","地市","区县","纬度","经度","POI名称","POI纬度","POI经度","距离","打分"}; help.writeExcel(heads, list, "lib/输出.xlsx"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
http://www.pudn.com/Download/item/id/2798913.html