一脸懵逼学习Java操作Excel之POI(Apache POI)
Posted 别宏利
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一脸懵逼学习Java操作Excel之POI(Apache POI)相关的知识,希望对你有一定的参考价值。
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 }
演示效果如下所示:
以上是关于一脸懵逼学习Java操作Excel之POI(Apache POI)的主要内容,如果未能解决你的问题,请参考以下文章