您的位置:首页 > 运维架构 > Apache

Java使用Apache POI进行Excel导入和导出

2018-08-05 10:21 609 查看
Manve依赖
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.5-FINAL</version>
</dependency>

 

1. Apache POI 中常用的类
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC97格式档案的功能。
XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。

 

2.Excel中的工作簿、工作表、行、单元格中的关系:
一个Excel文件对应于一个workbook(HSSFWorkbook),
一个workbook可以有多个sheet(HSSFSheet)组成,
一个sheet是由多个row(HSSFRow)组成,
一个row是由多个cell(HSSFCell)组成

 

3.演示2003和2007版Excel解析(导出)
//获取文件流
InputStream inputStream = new FileInputStream("C:\\Users\\50360\\Desktop\\hahahhahahh.xlsx");

//创建07版的Workbook  文件格式是xls是03版的 应该使用new HSSFWorkbook
Workbook workbook = new XSSFWorkbook(inputStream);

//获取第一个Sheet1
Sheet sheet = workbook.getSheetAt(0);

//获取一个POI的时间日期格式化器
DataFormatter formatter = new DataFormatter();

//循环遍历Sheet1的每一行
for (Row row : sheet) {

//遍历Sheet1每一行的每个单元格
for (Cell cell : row) {

CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());

//获取这个单元格的坐名称  $A$1
System.out.print(cellRef.formatAsString());
System.out.print(" - ");

//通过获取单元格值并应用任何数据格式(Date,0.00,1.23e9,$ 1.23等),获取单元格中显示的文本
String text = formatter.formatCellValue(cell);
System.out.println(text);

//获取值并自己格式化
switch (cell.getCellType()) {
// 字符串型
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
// 数值型
case Cell.CELL_TYPE_NUMERIC:
// 如果是date类型则 ,获取该cell的date值
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {// 纯数字
System.out.println(cell.getNumericCellValue());
}
break;
// 布尔
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
// 公式型
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
// 空值
case Cell.CELL_TYPE_BLANK:
System.out.println();
break;
// 故障
case Cell.CELL_TYPE_ERROR:
System.out.println();
break;
default:
System.out.println();
}
}
}

}
4.Excel2003和2007的新建(导入)
//新建(导入)Excel方法,isXlsx标记为07版
public Workbook export(boolean isXlsx) {

//创建一个Excel
Workbook workbook;

//根据要求创建03或者07版本
if(isXlsx) {
workbook = new XSSFWorkbook();
} else {
workbook = new HSSFWorkbook();
}

//创建一个Sheet
Sheet sheet = workbook.createSheet("My Sheet");

//获取模拟数据
List<List<String>> content = this.getContent();

//循环遍历将数据填充到Excel中
for(int i = 0; i < content.size(); i++) {
Row row = sheet.createRow(i);
List<String> rowData = content.get(i);
for(int j  = 0; j < rowData.size(); j++) {
row.createCell(j).setCellValue(rowData.get(j));
}
}
return workbook;
}

//模拟导入的Excel中的数据
private List<List<String>> getContent() {
List<List<String>> result = new ArrayList<>();
List<String> row = new ArrayList<>();
result.add(row);
row.add("序号");
row.add("姓名");
row.add("年龄");
row.add("时间");

row = new ArrayList<>();
result.add(row);
row.add("1");
row.add("路人甲");
row.add("18");
row.add("2010-01-01");

row = new ArrayList<>();
result.add(row);
row.add("2");
row.add("路人乙");
row.add("19");
row.add("2010-01-02");

row = new ArrayList<>();
result.add(row);
row.add("3");
row.add("路人丙");
row.add("20");
row.add("2010-01-03");
return result;
}

 

最后:Apache POI可以操作很多文档,比如word等,当然这里仅仅介绍了Excel常用的导入和导出功能,步骤已经写上备注了。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: