之前寫過一篇類似的文章 這次重新寫一下 添加了一些關於樣式的代碼
package excel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Method; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPalette; 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.hssf.util.CellRangeAddress; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; /** * 從excel讀取數據/往excel中寫入 excel有表頭,表頭每列的內容對應實體類的屬性 * * @author nagsh * */ public class ExcelManage { private HSSFWorkbook workbook = null; /** * 判斷文件是否存在. * @param fileDir 文件路徑 * @return */ public boolean fileExist(String fileDir){ boolean flag = false; File file = new File(fileDir); flag = file.exists(); return flag; } /** * 判斷文件的sheet是否存在. * @param fileDir 文件路徑 * @param sheetName 表格索引名 * @return */ public boolean sheetExist(String fileDir,String sheetName){ 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) { e.printStackTrace(); } }else{ //文件不存在 flag = false; } return flag; } /** * 創建新excel. * @param fileDir excel的路徑 * @param sheetName 要創建的表格索引 * @param titleRow excel的第一行即表格頭 */ public void createExcel(String fileDir,String sheetName,String titleRow[]){ //創建workbook workbook = new HSSFWorkbook(); //添加Worksheet(不添加sheet時生成的xls文件打開時會報錯) Sheet sheet1 = workbook.createSheet(sheetName); //新建文件 FileOutputStream out = null; try { //添加表頭 Row row = workbook.getSheet(sheetName).createRow(0); //創建第一行 for(int i = 0;i < titleRow.length;i++){ Cell cell = row.createCell(i); cell.setCellValue(titleRow[i]); } out = new FileOutputStream(fileDir); workbook.write(out); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 刪除文件. * @param fileDir 文件路徑 */ public 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; } /** * 合並單元格 * @param workbook * @param fileDir * @param sheetName * @param rowStart 合並單元格開始行行號 從1開始數 * @param rowEnd 合並單元格結束行行號 從1開始數 * @param ColumnStart 合並單元格開始列列號 從1數 * @param ColumnEnd 合並單元格結束列列號 從1數 */ public void mergedCell(HSSFWorkbook workbook,String fileDir,String sheetName,int rowStart,int rowEnd,int ColumnStart,int ColumnEnd){ try { FileOutputStream out = null; HSSFSheet sheet = workbook.getSheet(sheetName); sheet.addMergedRegion(new CellRangeAddress((short)rowStart-1,(short)rowEnd-1,(short)ColumnStart-1,(short)ColumnEnd-1)); out = new FileOutputStream(fileDir); workbook.write(out); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } /** * 刪除行【徹底刪除】 * @param workbook * @param fileDir * @param sheetName * @param rowNum 行號 */ public void removeRow(HSSFWorkbook workbook,String fileDir,String sheetName,int rowNum){ try { //流 FileOutputStream out = null; HSSFSheet sheet = workbook.getSheet(sheetName); int rowCount = sheet.getLastRowNum(); sheet.shiftRows(rowNum, rowCount, -1); //上移 out = new FileOutputStream(fileDir); workbook.write(out); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } /** * 刪除行【刪除數據】 * @param workbook * @param fileDir * @param sheetName * @param rowNum 行號 */ public void removeRowData(HSSFWorkbook workbook,String fileDir,String sheetName,int rowNum){ try { //流 FileOutputStream out = null; HSSFSheet sheet = workbook.getSheet(sheetName); Row row = sheet.getRow(rowNum-1); sheet.removeRow(row); out = new FileOutputStream(fileDir); workbook.write(out); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } /** * 往excel中寫入 * @param fileDir 文件路徑 * @param sheetName 表格索引 * @param object */ public void writeToExcel(String fileDir,String sheetName, Object object){ //創建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(); try { Row row = sheet.createRow(rowCount); //最新要添加的一行 //通過反射獲得object的字段,對應表頭插入 // 獲取該對象的class對象 Class class_ = object.getClass(); // 獲得表頭行對象 HSSFRow titleRow = sheet.getRow(0); if(titleRow!=null){ for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) { //遍歷表頭 String title = titleRow.getCell(columnIndex).toString().trim().toString().trim(); String UTitle = Character.toUpperCase(title.charAt(0))+ title.substring(1, title.length()); // 使其首字母大寫; String methodName = get+UTitle; Method method = class_.getDeclaredMethod(methodName); // 設置要執行的方法 String data = method.invoke(object).toString(); // 執行該get方法,即要插入的數據 Cell cell = row.createCell(columnIndex); cell.setCellValue(data); } } out = new FileOutputStream(fileDir); workbook.write(out); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 向某一行添加數據 * @param workbook 使用該參數是為了在傳遞樣式是保證workbook一致 * @param fileDir 文件路徑 * @param sheetName 索引 * @param rowNumber 要添加到哪行 * @param datas 添加的數據 【column,data】列號-數據 * @param style 樣式 */ public void writeOneRow(HSSFWorkbook workbook,String fileDir,String sheetName,int rowNumber,Listdatas){ try { //流 FileOutputStream out = null; HSSFSheet sheet = workbook.getSheet(sheetName); sheet.autoSizeColumn(1,true); //設置自適應寬度 //最新要添加的一行 Row row = sheet.getRow(rowNumber-1); if(row==null){ row = sheet.createRow(rowNumber-1); } //寫入數據 for(PoiCell data:datas){ Cell cell = row.createCell(data.getColumn()-1); //設置樣式 cell.setCellStyle(data.getStyle()); //設置數據 cell.setCellValue(data.getData()); } out = new FileOutputStream(fileDir); workbook.write(out); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 將16進制的顏色代碼寫入樣式中來設置顏色 * @param style 保證style統一 * @param color 顏色:66FFDD * @param index 索引 1-48 使用時不可重復 * @return */ public CellStyle getColorStyle(CellStyle style,String color,short index){ if(color!=&&color!=null){ //轉為RGB碼 int r = Integer.parseInt((color.substring(0,2)),16); //轉為16進制 int g = Integer.parseInt((color.substring(2,4)),16); int b = Integer.parseInt((color.substring(4,6)),16); //自定義cell顏色 HSSFPalette palette = workbook.getCustomPalette(); palette.setColorAtIndex((short)index, (byte) r, (byte) g, (byte) b); style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(index); } return style; } /** * 設置邊框 * @param style * @return */ public CellStyle setBorder(CellStyle style){ style.setBorderBottom(CellStyle.BORDER_THIN); //下邊框 style.setBorderLeft(CellStyle.BORDER_THIN);//左邊框 style.setBorderTop(CellStyle.BORDER_THIN);//上邊框 style.setBorderRight(CellStyle.BORDER_THIN);//右邊框 return style; } /** * 設置字體 * @param style * @return */ public CellStyle setFont(CellStyle style){ HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 12); font.setFontName(仿宋); font.setBold(true); style.setFont(font); return style; } }
CellRangeAddress c = (CellRangeAddress) CellRangeAddress.valueOf(“A2:L2”);
sheet.setAutoFilter(c);
這個不止使用了HSSF的包 還使用了這個
import org.apache.poi.ss.util.CellRangeAddress;