3.poi入门操作
3.1 搭建环境
12 6 7org.apache.poi 3poi 44.1.0 58 12org.apache.poi 9poi-ooxml 104.1.0 1113 org.apache.poi 14poi-ooxml-schemas 154.1.0 16
3.4基本操作
public class App { public static void main(String[] args) { //1.创建工作簿 Workbook wb = new XSSFWorkbook();//2007版 //2.创建sheet Sheet sheet = wb.createSheet("test"); //3文件流 try (FileOutputStream fos = new FileOutputStream("E:\\poi\\test.xlsx")) { wb.write(fos); } catch (IOException e) { e.printStackTrace(); } }}
Demo2 设置单元格样式
1 /** 2 * Demo2设置单元格样式 3 */ 4 public class Demo2 { 5 public static void main(String[] args) { 6 //1.创建工作簿 7 Workbook wb = new XSSFWorkbook();//2007版 8 //2.创建sheet 9 Sheet sheet = wb.createSheet("test");10 //创建行对象,参数:索引从0开始11 Row row = sheet.createRow(2);12 //创建单元格对象,索引从0开始13 Cell cell = row.createCell(2);14 cell.setCellValue("才高八斗");15 16 //样式处理17 //创建样式对象18 CellStyle style = wb.createCellStyle();19 style.setBorderTop(BorderStyle.THIN);//上边框20 style.setBorderRight(BorderStyle.THIN);//右边框21 style.setBorderBottom(BorderStyle.THIN);//下边框22 style.setBorderLeft(BorderStyle.THIN);//左边框23 24 //创建字体对象25 Font font = wb.createFont();26 font.setFontName("华文行楷");27 font.setFontHeightInPoints((short) 28);//设置字号28 style.setFont(font);29 30 //行高和列宽31 row.setHeightInPoints(50);//设置行高32 sheet.setColumnWidth(2, 31 * 256);//第三列,设置列宽需要乘以25633 34 //设置水平居中35 style.setAlignment(HorizontalAlignment.CENTER);36 //设置垂直居中37 style.setVerticalAlignment(VerticalAlignment.CENTER);38 39 //向单元格设置样式40 cell.setCellStyle(style);41 42 //3文件流43 try (FileOutputStream fos = new FileOutputStream("E:\\poi\\test3.xlsx")) {44 wb.write(fos);45 } catch (IOException e) {46 e.printStackTrace();47 }48 49 }50 }
Demo3 在Excel中添加图片
1 /** 2 * Demo3在Excel中添加图片 3 */ 4 public class Demo1 { 5 public static void main(String[] args) throws IOException { 6 //1.创建工作簿 7 Workbook wb = new XSSFWorkbook();//2007版 8 //2.创建sheet 9 Sheet sheet = wb.createSheet("test");10 11 //------------------------------------------------------------12 //1.读取图片流13 FileInputStream fis = new FileInputStream("E:\\poi\\merry.jpg");14 15 //2.转化二进制数组16 byte[] bytes = IOUtils.toByteArray(fis);17 fis.read(bytes);18 //3.向poi内存中添加一张图片,返回图片在图片集合中的索引19 int index = ((XSSFWorkbook) wb).addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);20 //4.绘制图片工具类21 CreationHelper helper = wb.getCreationHelper();22 //5.创建一个绘图对象23 Drawing drawing = sheet.createDrawingPatriarch();24 //6.创建锚点,设置图片坐标25 ClientAnchor anchor = helper.createClientAnchor();26 //设置图片起始位置27 anchor.setRow1(1);28 anchor.setCol1(1);29 设置图片结束位置30 anchor.setRow2(15);31 anchor.setCol2(15);32 //7.绘制图片33 Picture picture = drawing.createPicture(anchor, index);//图片位置,图片的索引34 // picture.resize();//自适应渲染图片35 //------------------------------------------------------------36 //3文件流37 try (FileOutputStream fos = new FileOutputStream("E:\\poi\\test4.xlsx")) {38 wb.write(fos);39 } catch (IOException e) {40 e.printStackTrace();41 }42 43 }44 }
加载Excel
/** * Demo4读取Excel并解析 * sheet.getLastRowNum():获取最后一行的索引值 * row.getLastCellNum():获取最后一个单元格的号码 */public class Demo4 { public static void main(String[] args) throws IOException { //1.根据Excel文件创建工作簿 Workbook wb = new XSSFWorkbook("E:\\poi\\demo2.xlsx"); //2.获取Sheet Sheet sheet = wb.getSheetAt(0); //3.获取sheet中的每一行和每一个单元格 for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) { Row row = sheet.getRow(rowNum);//根据索引获取每一行 if (row == null){ continue; } StringBuilder sb = new StringBuilder(); for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) { //根据索引获取每一个单元格 Cell cell = row.getCell(cellNum); if(cell == null){ continue; } //获取每一个单元格的内容 Object value = getCellValue(cell); sb.append(value).append("-"); } System.out.println(sb.toString()); } } private static Object getCellValue(Cell cell) { //1.获取单元格的属性类型 CellType cellType = cell.getCellType(); //2.根据单元格的类型获取时间 Object value = null; switch (cellType) { case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { //日期格式 value = cell.getDateCellValue(); } else { value = cell.getNumericCellValue(); } break; case STRING: value = cell.getStringCellValue(); break; case BOOLEAN: value = cell.getBooleanCellValue(); break; case FORMULA://公式类型 value = cell.getCellFormula(); break; default: break; } return value; }}