欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

poi 操作excel 常用操作,poi操作excel,之前写过一篇类似的文章

来源: javaer 分享于  点击 17614 次 点评:197

poi 操作excel 常用操作,poi操作excel,之前写过一篇类似的文章


之前写过一篇类似的文章 这次重新写一下 添加了一些关于样式的代码

    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!=""&amp;&amp;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;

相关栏目:

用户点评