Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
1:下面简单的程序来创建一个空白Microsoft Excel工作簿。
请记住一定要引入jar包,切记:http://poi.apache.org/download.html
如:poi-3.9-20121203.jar
1 package com.bie; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 6 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 7 import org.apache.poi.ss.usermodel.Workbook; 8 9 /** 10 * 11 * @author biexiansheng 12 * 13 */ 14 public class PoiTest { 15 16 public static void main(String[] args) throws IOException { 17 //创建一个空的工作簿 18 Workbook wb = new HSSFWorkbook(); 19 //创建输出流 20 FileOutputStream fos = new FileOutputStream("c:\\poi.xlsx"); 21 //写入到流中,创建这个excel文件 22 wb.write(fos); 23 //关闭流 24 fos.close(); 25 26 } 27 }
2:创建一个excel,然后插入一些数据测试一下;
1 package com.bie; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.util.Calendar; 6 import java.util.Date; 7 8 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 9 import org.apache.poi.ss.usermodel.Cell; 10 import org.apache.poi.ss.usermodel.CellStyle; 11 import org.apache.poi.ss.usermodel.CreationHelper; 12 import org.apache.poi.ss.usermodel.Row; 13 import org.apache.poi.ss.usermodel.Sheet; 14 import org.apache.poi.ss.usermodel.Workbook; 15 16 /** 17 * 18 * @author biexiansheng 19 * 20 */ 21 public class PoiTest { 22 23 public static void main(String[] args) throws IOException { 24 //创建一个空的工作簿 25 Workbook wb = new HSSFWorkbook(); 26 //创建sheet页 27 Sheet sheet1 = wb.createSheet("第一个sheet页"); 28 wb.createSheet("第二个sheet页"); 29 //创建一个行 30 Row createRow = sheet1.createRow(0); 31 //创建一个单元格,第一列 32 Cell createCell = createRow.createCell(0); 33 createCell.setCellValue("编号"); 34 //创建一个单元格,第二列,然后对此单元格进行赋值 35 createRow.createCell(1).setCellValue("姓名"); 36 //创建一个单元格,第三列,然后对此单元格进行赋值 37 createRow.createCell(2).setCellValue("年龄"); 38 //创建一个单元格,第四列,然后对此单元格进行赋值 39 createRow.createCell(3).setCellValue("性别"); 40 //创建一个单元格,第五列,然后对此单元格进行赋值 41 createRow.createCell(4).setCellValue("生日"); 42 43 //创建第二行 44 Row createRow2 = sheet1.createRow(1); 45 //创建单元格,然后对单元格进行赋值 46 createRow2.createCell(0).setCellValue("10010"); 47 createRow2.createCell(1).setCellValue("张三"); 48 createRow2.createCell(2).setCellValue("15"); 49 createRow2.createCell(3).setCellValue("男"); 50 51 //设置时间格式 52 //创建一个单元格的样式,单元格样式类 53 CellStyle cellStyle = wb.createCellStyle(); 54 CreationHelper creationHelper = wb.getCreationHelper(); 55 //格式化日期 56 cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss")); 57 //得到这个单元格,用于赋值和设置单元格的格式 58 //第一种方法: 59 Cell createCell2 = createRow2.createCell(4); 60 createCell2.setCellValue(new Date()); 61 createCell2.setCellStyle(cellStyle); 62 63 //第二种方法: 64 //Cell createCell3 = createRow2.createCell(4); 65 //createCell3.setCellValue(Calendar.getInstance()); 66 //createCell3.setCellStyle(cellStyle); 67 68 69 //创建输出流 70 FileOutputStream fos = new FileOutputStream("c:\\poi.xlsx"); 71 //写入到流中,创建这个excel文件 72 wb.write(fos); 73 //关闭流 74 fos.close(); 75 76 } 77 }
可以看到excel里面的数据内容如下所示:
3:创建一个时间格式的单元格
package com.bie; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; 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.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; /** * * @author biexiansheng * */ public class PoiTest { public static void main(String[] args) throws IOException { //创建一个空的工作簿 Workbook wb = new HSSFWorkbook(); //创建sheet页 Sheet sheet1 = wb.createSheet("第一个sheet页"); wb.createSheet("第二个sheet页"); //创建一个行 Row createRow = sheet1.createRow(0); //创建一个单元格,第一列 Cell createCell = createRow.createCell(0); createCell.setCellValue("编号"); //创建一个单元格,第二列,然后对此单元格进行赋值 createRow.createCell(1).setCellValue("姓名"); //创建一个单元格,第三列,然后对此单元格进行赋值 createRow.createCell(2).setCellValue("年龄"); //创建一个单元格,第四列,然后对此单元格进行赋值 createRow.createCell(3).setCellValue("性别"); //创建一个单元格,第五列,然后对此单元格进行赋值 createRow.createCell(4).setCellValue("生日"); //创建第二行 Row createRow2 = sheet1.createRow(1); //创建单元格,然后对单元格进行赋值 createRow2.createCell(0).setCellValue("10010"); createRow2.createCell(1).setCellValue("张三"); createRow2.createCell(2).setCellValue("15"); createRow2.createCell(3).setCellValue("男"); //设置时间格式 //创建一个单元格的样式,单元格样式类 CellStyle cellStyle = wb.createCellStyle(); CreationHelper creationHelper = wb.getCreationHelper(); //格式化日期 cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss")); //得到这个单元格,用于赋值和设置单元格的格式 Cell createCell2 = createRow2.createCell(4); createCell2.setCellValue(new Date()); createCell2.setCellStyle(cellStyle); //创建输出流 FileOutputStream fos = new FileOutputStream("c:\\poi.xlsx"); //写入到流中,创建这个excel文件 wb.write(fos); //关闭流 fos.close(); } }
运行效果如下所示:
4:遍历工作簿的行和列并且获取单元格内容
1 package com.bie; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.util.Calendar; 7 import java.util.Date; 8 9 import org.apache.poi.hssf.usermodel.HSSFCell; 10 import org.apache.poi.hssf.usermodel.HSSFRow; 11 import org.apache.poi.hssf.usermodel.HSSFSheet; 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 13 import org.apache.poi.poifs.filesystem.POIFSFileSystem; 14 import org.apache.poi.ss.usermodel.Cell; 15 import org.apache.poi.ss.usermodel.CellStyle; 16 import org.apache.poi.ss.usermodel.CreationHelper; 17 import org.apache.poi.ss.usermodel.Row; 18 import org.apache.poi.ss.usermodel.Sheet; 19 import org.apache.poi.ss.usermodel.Workbook; 20 21 /** 22 * 23 * @author biexiansheng 24 * 25 */ 26 public class PoiTest2 { 27 28 public static void main(String[] args) throws IOException { 29 FileInputStream fis = new FileInputStream("c:\\poi.xlsx"); 30 //接受输入流 31 POIFSFileSystem pfs = new POIFSFileSystem(fis); 32 //创建一个工作簿 33 HSSFWorkbook hwb = new HSSFWorkbook(pfs); 34 //获取第一个sheet页 35 HSSFSheet sheetAt = hwb.getSheetAt(0); 36 if(sheetAt == null){ 37 return ; 38 } 39 40 //遍历行里面的单元格内容. 41 for(int i =0; i<=sheetAt.getLastRowNum(); i++){ 42 //得到每一行 43 HSSFRow row = sheetAt.getRow(i); 44 //如果为空就跳出 45 if(row == null){ 46 continue; 47 } 48 //遍历列 49 for(int j=0; j<row.getLastCellNum(); j++){ 50 //遍历列里面的内容 51 HSSFCell cell = row.getCell(j); 52 if(cell == null){ 53 continue; 54 } 55 //输出列里面的内容 56 System.out.print(" " + cell); 57 } 58 System.out.println(); 59 } 60 } 61 62 63 public static String getValue(HSSFCell cell){ 64 if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){ 65 return String.valueOf(cell.getBooleanCellValue()); 66 }else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ 67 return String.valueOf(cell.getNumericCellValue()); 68 }else{ 69 return String.valueOf(HSSFCell.CELL_TYPE_STRING); 70 } 71 } 72 73 }
运行效果如下所示:
5:文本提取
1 package com.bie; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.util.Calendar; 7 import java.util.Date; 8 9 import org.apache.poi.hssf.extractor.ExcelExtractor; 10 import org.apache.poi.hssf.usermodel.HSSFCell; 11 import org.apache.poi.hssf.usermodel.HSSFRow; 12 import org.apache.poi.hssf.usermodel.HSSFSheet; 13 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 14 import org.apache.poi.poifs.filesystem.POIFSFileSystem; 15 import org.apache.poi.ss.usermodel.Cell; 16 import org.apache.poi.ss.usermodel.CellStyle; 17 import org.apache.poi.ss.usermodel.CreationHelper; 18 import org.apache.poi.ss.usermodel.Row; 19 import org.apache.poi.ss.usermodel.Sheet; 20 import org.apache.poi.ss.usermodel.Workbook; 21 22 /** 23 * 24 * @author biexiansheng 25 * 26 */ 27 public class PoiTest3 { 28 29 public static void main(String[] args) throws IOException { 30 FileInputStream fis = new FileInputStream("c:\\poi.xlsx"); 31 //接受输入流 32 POIFSFileSystem pfs = new POIFSFileSystem(fis); 33 //创建一个工作簿 34 HSSFWorkbook hwb = new HSSFWorkbook(pfs); 35 //获取第一个sheet页 36 HSSFSheet sheetAt = hwb.getSheetAt(0); 37 if(sheetAt == null){ 38 return ; 39 } 40 //文本抽取 41 ExcelExtractor excelExtractor = new ExcelExtractor(hwb); 42 System.out.println(excelExtractor.getText()); 43 } 44 45 }
运行效果如下所示://不要sheet的名称
excelExtractor.setIncludeSheetNames(false);
6:单元格对齐方式,单元格边框处理,单元格填充色和颜色操作,单元格合并
1 package com.bie; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 6 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 7 import org.apache.poi.hssf.usermodel.HSSFRichTextString; 8 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 9 import org.apache.poi.ss.usermodel.Cell; 10 import org.apache.poi.ss.usermodel.CellStyle; 11 import org.apache.poi.ss.usermodel.IndexedColors; 12 import org.apache.poi.ss.usermodel.Row; 13 import org.apache.poi.ss.usermodel.Sheet; 14 import org.apache.poi.ss.usermodel.Workbook; 15 import org.apache.poi.ss.util.CellRangeAddress; 16 17 /** 18 * @author Author:别先生 19 * @date Date:2017年9月9日 上午10:14:31 20 * 21 * 22 */ 23 public class PoiTest { 24 25 /*** 26 * 创建一个单元格并为其设定指定的对齐方式 27 * @param wb 工作簿 28 * @param row 行 29 * @param column 列 30 * @param halign 水平对齐的方式 31 * @param valign 垂直对齐的方式 32 */ 33 private static void createCell(Workbook wb,Row row,short column,short halign,short valign){ 34 //创建单元格 35 Cell cell = row.createCell(column); 36 //设置单元格的值 37 cell.setCellValue(new HSSFRichTextString("测试内容")); 38 //创建单元格的样式 39 CellStyle cellStyle = wb.createCellStyle(); 40 //设置单元格水平对齐方式 41 cellStyle.setAlignment(halign); 42 //设置单元格垂直对齐方式 43 cellStyle.setVerticalAlignment(valign); 44 45 //设置边框线和颜色 46 //底部边框 47 cellStyle.setBorderBottom(CellStyle.BORDER_THIN); 48 //底部颜色 49 cellStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex()); 50 51 //左边边框 52 cellStyle.setBorderLeft(CellStyle.BORDER_DASH_DOT); 53 //左边颜色 54 cellStyle.setBottomBorderColor(IndexedColors.RED.getIndex()); 55 56 //右边边框 57 cellStyle.setRightBorderColor(CellStyle.ALIGN_FILL); 58 //右边边框颜色 59 cellStyle.setBottomBorderColor(IndexedColors.DARK_YELLOW.getIndex()); 60 61 //顶部边框 62 cellStyle.setBorderTop(CellStyle.BORDER_DOTTED); 63 //顶部颜色 64 cellStyle.setTopBorderColor(IndexedColors.AUTOMATIC.getIndex()); 65 66 //设置单元格填充色和颜色操作 67 //设置背景颜色 68 cellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex()); 69 cellStyle.setFillPattern(CellStyle.BIG_SPOTS); 70 //设置前景颜色 71 cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex()); 72 cellStyle.setFillPattern(CellStyle.BIG_SPOTS); 73 74 //设置单元格的样式 75 cell.setCellStyle(cellStyle); 76 } 77 78 public static void main(String[] args) throws IOException { 79 //定义一个工作簿 80 Workbook wb =new HSSFWorkbook(); 81 //创建第一个sheet页 82 Sheet createSheet = wb.createSheet("第一个sheet"); 83 //创建第一行 84 Row createRow = createSheet.createRow(0); 85 createRow.setHeightInPoints(30); 86 87 //调用工具方法,创建单元格 88 //单元格的对齐方式的调用和使用 89 createCell(wb, createRow, (short)0, HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_BOTTOM);; 90 createCell(wb, createRow, (short)1, HSSFCellStyle.ALIGN_LEFT, HSSFCellStyle.VERTICAL_CENTER);; 91 createCell(wb, createRow, (short)2, HSSFCellStyle.ALIGN_RIGHT, HSSFCellStyle.VERTICAL_TOP);; 92 createCell(wb, createRow, (short)3, HSSFCellStyle.ALIGN_JUSTIFY, HSSFCellStyle.VERTICAL_JUSTIFY);; 93 94 95 //创建单元格 96 //创建第3行 97 Row createRow2 = createSheet.createRow(2); 98 createRow.setHeightInPoints(30); 99 //创建第一列和第二列 100 Cell createCell = createRow2.createCell(0); 101 createCell.setCellValue("单元格合并1"); 102 103 Cell createCell2 = createRow2.createCell(1); 104 createCell2.setCellValue("单元格合并2"); 105 106 //单元格合并,起始行,结束行,起始列,结束列 107 createSheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 3)); 108 109 110 //创建输出流 111 FileOutputStream fos = new FileOutputStream("d:\\poi.xlsx"); 112 //将内容写到excel文件中 113 wb.write(fos); 114 //关闭流 115 fos.close(); 116 } 117 118 }
演示效果如下所示:
7:字体处理的单元格
1 package com.bie; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 6 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 7 import org.apache.poi.ss.usermodel.Cell; 8 import org.apache.poi.ss.usermodel.CellStyle; 9 import org.apache.poi.ss.usermodel.Font; 10 import org.apache.poi.ss.usermodel.Row; 11 import org.apache.poi.ss.usermodel.Sheet; 12 import org.apache.poi.ss.usermodel.Workbook; 13 import org.apache.poi.ss.util.CellRangeAddress; 14 15 /** 16 * @author Author:别先生 17 * @date Date:2017年9月9日 上午10:14:31 18 * 19 * 20 */ 21 public class PoiTest2 { 22 23 24 public static void main(String[] args) throws IOException { 25 //定义一个工作簿 26 Workbook wb =new HSSFWorkbook(); 27 //创建第一个sheet页 28 Sheet createSheet = wb.createSheet("第一个sheet"); 29 //创建第一行 30 Row createRow = createSheet.createRow(0); 31 32 //创建一个字体处理类 33 Font createFont = wb.createFont(); 34 createFont.setFontHeightInPoints((short)25); 35 createFont.setFontName("Courier New"); 36 createFont.setItalic(true); 37 createFont.setStrikeout(true); 38 39 CellStyle createCellStyle = wb.createCellStyle(); 40 createCellStyle.setFont(createFont); 41 42 //创建单元格 43 Cell createCell = createRow.createCell((short)1); 44 createCell.setCellValue("这是一个字体设计的单元格"); 45 createCell.setCellStyle(createCellStyle); 46 47 //创建输出流 48 FileOutputStream fos = new FileOutputStream("d:\\poi.xlsx"); 49 //将内容写到excel文件中 50 wb.write(fos); 51 //关闭流 52 fos.close(); 53 } 54 55 }
演示效果如下所示:
8:读取和重写工作簿
1 package com.bie; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 8 import org.apache.poi.poifs.filesystem.POIFSFileSystem; 9 import org.apache.poi.ss.usermodel.Cell; 10 import org.apache.poi.ss.usermodel.Row; 11 import org.apache.poi.ss.usermodel.Sheet; 12 import org.apache.poi.ss.usermodel.Workbook; 13 14 /** 15 * @author Author:别先生 16 * @date Date:2017年9月9日 上午10:14:31 17 * 18 * 19 */ 20 public class PoiTest3 { 21 22 23 public static void main(String[] args) throws IOException { 24 //创建输入流 25 FileInputStream fis = new FileInputStream("d:\\poi.xlsx"); 26 //将获取到文件流放到内存中 27 POIFSFileSystem pfs = new POIFSFileSystem(fis); 28 //创建一个工作簿 29 Workbook wb = new HSSFWorkbook(pfs); 30 //获取第一个sheet页 31 Sheet sheetAt = wb.getSheetAt(0); 32 //获取第6行 33 Row row = sheetAt.getRow(5); 34 //获取第六个单元格 35 Cell cell = row.getCell(0); 36 if(cell == null){ 37 cell = row.createCell(3); 38 } 39 cell.setCellType(Cell.CELL_TYPE_STRING); 40 cell.setCellValue("测试单元格"); 41 42 43 //创建输出流 44 FileOutputStream fos = new FileOutputStream("d:\\poi.xlsx"); 45 //将内容写到excel文件中 46 wb.write(fos); 47 //关闭流 48 fos.close(); 49 fis.close(); 50 } 51 52 }
演示效果如下所示:
9:poi操作单元格换行操作:
1 package com.bie; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 6 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 7 import org.apache.poi.hssf.usermodel.HSSFRichTextString; 8 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 9 import org.apache.poi.ss.usermodel.Cell; 10 import org.apache.poi.ss.usermodel.CellStyle; 11 import org.apache.poi.ss.usermodel.IndexedColors; 12 import org.apache.poi.ss.usermodel.Row; 13 import org.apache.poi.ss.usermodel.Sheet; 14 import org.apache.poi.ss.usermodel.Workbook; 15 import org.apache.poi.ss.util.CellRangeAddress; 16 17 /** 18 * @author Author:别先生 19 * @date Date:2017年9月9日 上午10:14:31 20 * 21 * 22 */ 23 public class PoiTest4 { 24 25 26 public static void main(String[] args) throws IOException { 27 //定义一个工作簿 28 Workbook wb =new HSSFWorkbook(); 29 //创建第一个sheet页 30 Sheet createSheet = wb.createSheet("第一个sheet"); 31 //创建第一行 32 Row createRow = createSheet.createRow(0); 33 //创建单元格 34 Cell createCell = createRow.createCell(2); 35 createCell.setCellValue("我要换行\n are you ok !!!!"); 36 37 //设置样式 38 CellStyle cs = wb.createCellStyle(); 39 //设置可以换行 40 cs.setWrapText(true); 41 createCell.setCellStyle(cs); 42 43 //调整一下行的高度 44 createRow.setHeightInPoints(2 * createSheet.getDefaultRowHeightInPoints()); 45 //调整单元格的宽度 46 createSheet.autoSizeColumn(2); 47 48 //创建输出流 49 FileOutputStream fos = new FileOutputStream("d:\\poi.xlsx"); 50 //将内容写到excel文件中 51 wb.write(fos); 52 //关闭流 53 fos.close(); 54 } 55 56 }
演示效果如下所示: