Apache的POI組件是Java操做Microsoft Office辦公套件的強大API,其中對Word,Excel和PowperPoint都有支持,固然使用較多的仍是Excel,由於Word和PowerPoint用程序動態操做的應用較少。本文主要介紹一下Excel的操做方法。java
// 建立字體 HSSFFont font = wb.createFont(); // 設置字體爲紅色 font.setColor(HSSFFont.COLOR_RED); // 設置字體爲粗體 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 建立單元格格式 HSSFCellStyle cellStyle= wb.createCellStyle(); // 設置字體 cellStyle.setFont(font); // 設置水平居中 cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 設置垂直靠下 cellStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM); // 設置左邊框爲雙線 cellStyle.setBorderLeft(CellStyle.BORDER_DOUBLE); // 設置背景色爲藍色 cellStyle.setFillBackgroundColor(new HSSFColor.BLUE().getIndex()); // 設置前景色爲黃色 cellStyle.setFillForegroundColor(new HSSFColor.YELLOW().getIndex());
POIExcelUtil 類: apache
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class POIExcelUtil { public static final String FILE_EXTENSION_XLS = "xls"; public static final String FILE_EXTENSION_XLSX = "xlsx"; /** * * @param Map * <String,String> maps 屬性表,成員屬性age爲KEY,中文名稱爲VALUE * @param List * <T> list 須要導出的數據列表對象 * @param File * file 指定輸出文件位置,只能導出excel2003以上版本 * * @return true 導出成功 false 導出失敗 */ public static <T> boolean excelExport(Map<String, String> maps, List<T> list, File file) { try { Workbook wb = null; String filename = file.getName(); String type = filename.substring(filename.lastIndexOf(".")+1).toLowerCase(); if (type.equals(FILE_EXTENSION_XLS)) { wb = new HSSFWorkbook(); } if (type.equals(FILE_EXTENSION_XLSX)) { wb = new XSSFWorkbook(); } CreationHelper createHelper = wb.getCreationHelper(); Sheet sheet = wb.createSheet("sheet1"); Set<String> sets = maps.keySet(); Row row = sheet.createRow(0); int i = 0; // 定義表頭 for (Iterator<String> it = sets.iterator(); it.hasNext();) { String key = it.next(); Cell cell = row.createCell(i++); cell.setCellValue(createHelper.createRichTextString(maps.get(key))); } // 填充表單內容 System.out.println("--------------------100%"); float avg = list.size() / 20f; int count = 1; for (int j = 0; j < list.size(); j++) { T p = list.get(j); Class classType = p.getClass(); int index = 0; Row row1 = sheet.createRow(j+1); for (Iterator<String> it = sets.iterator(); it.hasNext();) { String key = it.next(); String firstLetter = key.substring(0, 1).toUpperCase(); // 得到和屬性對應的getXXX()方法的名字 String getMethodName = "get" + firstLetter+ key.substring(1); // 得到和屬性對應的getXXX()方法 Method getMethod = classType.getMethod(getMethodName,new Class[] {}); // 調用原對象的getXXX()方法 Object value = getMethod.invoke(p, new Object[] {}); Cell cell = row1.createCell(index++); cell.setCellValue(value.toString()); } if (j > avg * count) { count++; System.out.print("I"); } if (count == 20) { System.out.print("I100%"); count++; } } FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); } catch (IOException e) { e.printStackTrace(); return false; } catch (SecurityException e) { e.printStackTrace(); return false; } catch (NoSuchMethodException e) { e.printStackTrace(); return false; } catch (IllegalArgumentException e) { e.printStackTrace(); return false; } catch (IllegalAccessException e) { e.printStackTrace(); return false; } catch (InvocationTargetException e) { e.printStackTrace(); return false; } return true; } }
POIExcelAnnotation 類:xss
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface POIExcelAnnotation { public String titleName(); }
POIExcelUtil 類:字體
import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class POIExcelUtil { public static final String FILE_EXTENSION_XLS = "xls"; public static final String FILE_EXTENSION_XLSX = "xlsx"; /** * * @param sheetName sheet名稱 * @param pojoClass POJO對象類 * @param list 導出數據列表 * @param file file 指定輸出文件 * @return true 導出成功 false 導出失敗 */ public static <T> boolean excelAnnotationExport(String sheetName ,Class<T> pojoClass,List<T> list, File file) { try { Workbook wb = null; String filename = file.getName(); String type = filename.substring(filename.lastIndexOf(".")+1).toLowerCase(); if (type.equals(FILE_EXTENSION_XLS)) { wb = new HSSFWorkbook(); } if (type.equals(FILE_EXTENSION_XLSX)) { wb = new XSSFWorkbook(); } CreationHelper createHelper = wb.getCreationHelper(); Sheet sheet = wb.createSheet(sheetName); // 標題 List<String> fieldTitle = new ArrayList<String>(); //方法列表,對應表頭 List<Method> methodObj = new ArrayList<Method>(); // 獲得全部字段 Field fileds[] = pojoClass.getDeclaredFields(); // 遍歷整個filed for (int i = 0; i < fileds.length; i++) { Field field = fileds[i]; POIExcelAnnotation annotation = field.getAnnotation(POIExcelAnnotation.class); // 若是設置了annottion if (annotation != null) { // 添加到標題 fieldTitle.add(annotation.titleName()); // 添加到須要導出的字段的方法 String fieldName = field.getName(); String firstLetter = fieldName.substring(0, 1).toUpperCase(); // 得到和屬性對應的getXXX()方法的名 String getMethodName = "get" + firstLetter+ fieldName.substring(1); // 得到和屬性對應的getXXX()方法 Method getMethod = pojoClass.getMethod(getMethodName,new Class[] {}); methodObj.add(getMethod); } } //設置表頭粗體 Font font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); CellStyle style = wb.createCellStyle(); style.setFont(font); //填充表頭內容 Row row = sheet.createRow(0); for(int i=0;i<fieldTitle.size();i++){ String title = fieldTitle.get(i); Cell cell = row.createCell(i); cell.setCellStyle(style); cell.setCellValue(createHelper.createRichTextString(title)); } // 填充表單內容 System.out.println("--------------------100%"); float avg = list.size() / 20f; int count = 1; for (int j = 0; j < list.size(); j++) { T p = list.get(j); Row row1 = sheet.createRow(j+1); for (int k=0;k<methodObj.size();k++) { Method getMethod = methodObj.get(k); Object value = getMethod.invoke(p, new Object[] {}); Cell cell = row1.createCell(k); cell.setCellValue(value.toString()); } if (j > avg * count) { count++; System.out.print("I"); } if (count == 20) { System.out.println("I100%"); count++; } } FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); } catch (IOException e) { e.printStackTrace(); return false; } catch (SecurityException e) { e.printStackTrace(); return false; } catch (NoSuchMethodException e) { e.printStackTrace(); return false; } catch (IllegalArgumentException e) { e.printStackTrace(); return false; } catch (IllegalAccessException e) { e.printStackTrace(); return false; } catch (InvocationTargetException e) { e.printStackTrace(); return false; } return true; } }
public static void main(String args[]){ List<JavaBean> demo = ****; Map<String,String> maps = new LinkedHashMap<String,String>(); maps.put("uid", "賬號"); maps.put("cn", "姓名"); maps.put("dept", "部門"); maps.put("mail", "郵箱"); Properties props = System.getProperties(); String USER_HOME = props.getProperty("user.home"); File file = new File(USER_HOME + "/Desktop/excelExport.xlsx"); POIExcelUtil.excelExport(maps, demo , file); }
Excel導入:ui
import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class POIExcelUtil { public static final String FILE_EXTENSION_XLS = "xls"; public static final String FILE_EXTENSION_XLSX = "xlsx"; @SuppressWarnings("unchecked") public static List importExcel(File file ){ List list = new ArrayList(); Workbook wb = null; String filename = file.getName(); String type = filename.substring(filename.lastIndexOf(".")+1).toLowerCase(); if (type.equals(FILE_EXTENSION_XLS)) { wb = new HSSFWorkbook(); } if (type.equals(FILE_EXTENSION_XLSX)) { wb = new XSSFWorkbook(); } Sheet sheet = wb.getSheetAt(0); for(int i=1;i<sheet.getLastRowNum();i++){ Row row = sheet.getRow(i); //如下代碼,根據需求自由變化 for(int j=0;j<row.getLastCellNum();j++){ Cell cell = row.getCell(j); list.add(cell.getRichStringCellValue().getString()); } } return list; } }