之前写过一篇类似的文章 这次重新写一下 添加了一些关于样式的代码
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,List<PoiCell> datas){ 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;
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-05 16:09:04