Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

1:下面简单的程序来创建一个空白Microsoft Excel工作簿。

请记住一定要引入jar包,切记:IT虾米网

如: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 }

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java更改数据库中的数据知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。