表格操作
1.为什么要学习
公司开发中 特别是开发 crm erp OA系统的时候 会有一个需求 导入和导出报表 (表格)
2. 解决方案
- jxl : 只能对Excel进行操作,属于比较老的框架,已经停止更新和维护(已经废弃)
- poi: 现在比较主流 可以操作不同版本的表格和word
3.版本说明
3.1 Excel2003
Excel2003是一个特有的二进制格式,其核心结构是复合文档类型的结构,存储数据量较小
3.2 Excel2007
Excel2007 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小,操作效率更高
4.poi的使用(表格操作)
4.1 生成表格
4.1.1 环境准备
新建maven基本工程 添加poi的坐标
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
4.1.2 最基本的生成表格
@Test
public void fun() throws Exception {
//创建工作簿
Workbook workbook = new XSSFWorkbook();
//创建文件输出流
FileOutputStream out = new FileOutputStream("E:\\demo.xlsx");
//把工作簿输出本地
workbook.write(out);
//关闭资源
out.close();
workbook.close();
}
类的说明
- HSSF操作Microsoft Excel XLS格式
- XSSF操作Microsoft Excel OOXML XLSX格式。
- HWPF操作Microsoft Word DOC格式
- HSLF操作Microsoft PowerPoint格式
4.1.3 操作表格的Sheet
@Test
public void fun1() throws Exception {
Workbook workbook = new XSSFWorkbook();
//创建sheet并且指定 sheet的名字
workbook.createSheet("财务管理");
FileOutputStream out = new FileOutputStream("E:\\demo1.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
4.1.4 操作表格的行
@Test
public void fun2() throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("财务管理");
//通过该Sheet创建row
//参数表示 行的索引 从0开始
Row row = sheet.createRow(0);
FileOutputStream out = new FileOutputStream("E:\\demo1.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
4.1.5 操作表格的单元格
@Test
public void fun3() throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("财务报表");
Row row = sheet.createRow(0);
//单元格 通过row创建
//参数表示索引 表示这一行的第几个单元格 索引从0开始
Cell cell = row.createCell(2);
//给单元格写文字
cell.setCellValue("辉哥真帅");
FileOutputStream out = new FileOutputStream("E:\\demo3.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
4.1.6 操作样式
@Test
public void fun4() throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("辉哥很帅");
Row row = sheet.createRow(3);
//创建Cell的样式 通过工作簿创建样式
CellStyle cellStyle = workbook.createCellStyle();
//获取设置文字样式
Font font = workbook.createFont();
//设置文字加粗
font.setBold(true);
//设置文字大小
font.setFontHeightInPoints((short)30);
cellStyle.setFont(font);
//设置上边框
cellStyle.setBorderTop(BorderStyle.DASHED);
//设置下边框
cellStyle.setBorderBottom(BorderStyle.DASHED);
//设置左边框
cellStyle.setBorderLeft(BorderStyle.DASHED);
//设置右边框
cellStyle.setBorderRight(BorderStyle.DASHED);
//设置文字水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//设置文字垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//设置行高
row.setHeightInPoints(40);
//设置单元格的宽度
//第一个参数 表示设置哪个单元格 表示索引 第二个表示宽度
sheet.setColumnWidth(3,50*256);
//创建单元格
Cell cell = row.createCell(3);
//给单元格设置值
cell.setCellValue("辉哥很帅");
//给这个单元格设置这个样式
cell.setCellStyle(cellStyle);
FileOutputStream out = new FileOutputStream("E:\\aaa4.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
4.2 读取表格
新建一个xlsl文件 填写信息
/**
* 读取表格
*/
public class POIDemo2 {
@Test
public void fun() throws Exception {
//加载xlsx文件
Workbook workbook = new XSSFWorkbook("E:\\person.xlsx");
//通过工作簿找到sheet
Sheet sheet = workbook.getSheetAt(0);
//获取一共多少行
int maxRow = sheet.getLastRowNum();
for (int i = 0; i <= maxRow; i++) {
//获得具体每一行
Row row = sheet.getRow(i);
//获取这一行 有多少个单元格
int lastCellNum = row.getLastCellNum();
StringBuffer buffer = new StringBuffer();
//遍历这一行的所有单元格
for (int j = 0; j <= lastCellNum; j++) {
//获取单元格
Cell cell = row.getCell(j);
if (cell != null) {
Object value = getValue(cell);
buffer.append(value).append("--");
}
}
System.out.println(buffer.toString());
}
}
public Object getValue(Cell cell) {
CellType cellTypeEnum = cell.getCellTypeEnum();
Object obj = null;
switch (cellTypeEnum) {
case STRING://字符串类型
obj = cell.getStringCellValue();
break;
case BOOLEAN:// boolean类型
obj = cell.getBooleanCellValue();
break;
case NUMERIC://数字和日期类型
if (DateUtil.isCellDateFormatted(cell)) {
//如果是日期类型
obj = cell.getDateCellValue();
} else {
//数字类型
obj = cell.getNumericCellValue();
DecimalFormat format = new DecimalFormat("#");
//修改小数点的问题
obj = format.format(obj);
}
break;
case FORMULA://如果是公式
obj = cell.getCellFormula();
break;
}
return obj;
}
}
5.项目中的使用
引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>