概述
目录
使用Apach POI进行Excel文件的解析
1、添加jar依赖包
2、Workbook(Excel文件)
2.1加载(解析)Excel文件
2.2创建Excel文件
3、Sheet工作簿
3.1获取Excel文件中的Sheet工作簿
3.2创建工作簿
4、Row(数据行)
4.1获取工作簿中的行数据(Row)
4.2创建数据行
5、Cell(单元格)
5.1获取行中的单元格数据(Cell)
5.2创建单元格
超大Excel文件读写
1.使用PIO写入
2.使用EasyExcel
2.1写入100w条数据
2.2读取100w条数据
2.3 POI 使用SXSSFWorkbook实现类和EasyExcel 写入100w数据时间对比
2.4 POI使用XSSFWorkbook实现类和使用SXSSFWorkbook实现类写入10w数据时间对比
在应用开发过程中,经常会需要Excel文件进行数据的导入或导出。通过Java语言实现此类需时,主流技术有Apache POI、JXL、Alibaba EasyExcel等;
核心类:Workbook类(Excel文件)、Sheet类(工作簿)、Row类(数据行)、Cell类(单元格)
使用Apach POI进行Excel文件的解析
1、添加jar依赖包
2、Workbook(Excel文件)
2.1加载(解析)Excel文件
try (
// 输入流
FileInputStream in = new FileInputStream("D:\test\1627356554991.xlsx");
// Excel文件对象
Workbook workbook = new XSSFWorkbook(in)) {
} catch (IOException e) {
e.printStackTrace();
}
2.2创建Excel文件
try (
Workbook workbook = new XSSFWorkbook();
FileOutputStream out= new FileOutputStream("D:\test\abc.xlsx")) {
// 将Workbook对象中包含的数据,通过输出流,写入值Excel文件
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
}
3、Sheet工作簿
3.1获取Excel文件中的Sheet工作簿
// 通过下标获取第2个工作簿(第一个工作簿是0)
Sheet sheet2 = workbook.getSheetAt(1);
3.2创建工作簿
// 按照默认名称创建工作簿
Sheet sheet = workbook.createSheet();
// 按照自定义名称创建工作簿
Sheet sheet1 = workbook.createSheet("工作簿1");
4、Row(数据行)
4.1获取工作簿中的行数据(Row)
// 获取工作簿中的行数据(Row)
int first = sheet2.getFirstRowNum(); // 获取首行下标
int last = sheet2.getLastRowNum(); // 获取尾行下标
Row row = sheet2.getRow(2); // 获取指定行的数据
for(Row row1 : sheet2) { // 遍历所有行
System.out.println(row1);
}
4.2创建数据行
Row row = sheet.createRow(0);
5、Cell(单元格)
5.1获取行中的单元格数据(Cell)
// 获取行中的单元格数据(Cell)
Cell cell = row.getCell(1); // 获取指定单元格数据
CellType type = cell.getCellType(); // 获取单元格类型
for(Cell cell1 : row) {
System.out.println(cell1); // 遍历所有单元格
}
5.2创建单元格
Cell cell0 = row.createCell(0); // 创建单元格
// 创建单元格格式
// 获取格式编码
DataFormat dataFormat = workbook.createDataFormat();
Short formatCode = dataFormat.getFormat("yyyy-MM-dd HH:mm:ss");
CellStyle cellStyle = workbook.createCellStyle(); // 创建CellStyle单元格格式对象
cellStyle.setDataFormat(formatCode); // 设置单元格格式编码
// 通过设置CellStyle单元格格式对象,来正常显示日期
cell0.setCellStyle(cellStyle); // 设置单元格格式
cell0.setCellValue(new Date());
超大Excel文件读写
1.使用PIO写入
使用SXSSFWorkbook实现类进行写入
try (Workbook workbook = new SXSSFWorkbook(100);
FileOutputStream fos = new FileOutputStream("c:\test\temp.xlsx")) {
Sheet sheet1 = workbook.createSheet();
for (int i = 0; i <= 1000000; i++) {
Row row = sheet1.createRow(i);
Cell cell0 = row.createCell(0);
cell0.setCellValue(UUID.randomUUID().toString());
Cell cell1 = row.createCell(1);
cell1.setCellValue(new Date());
}
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
2.使用EasyExcel
2.1写入100w条数据
public class Demo {
public static void main(String[] args) {
// 写入100w
EasyExcel.write("c:\test\run\easy.xlsx", Order.class)
.sheet("订单列表")
.doWrite(data());
}
// 创建100w条订单数据
private static List<Order> data() {
List<Order> list = new ArrayList<Order>();
for (int i = 0; i < 1000000; i++) {
list.add(new Order());
}
return list;
}
}
2.2读取100w条数据
// 用于保存读取到的结果
List<Order> orderList = new ArrayList<Order>();
// 读取
EasyExcel.read("D:\test\run\easy100ws.xlsx",
Order.class,
new AnalysisEventListener<Order>() {
@Override
public void invoke(Order order, AnalysisContext arg1) {
// 每读取带一条订单数据
orderList.add(order);
}
@Override
public void invokeHeadMap(java.util.Map<Integer,String> headMap, AnalysisContext context) {
// 读取表头元素
System.out.println(headMap);
super.invokeHeadMap(headMap, context);
}
@Override
public void doAfterAllAnalysed(AnalysisContext arg0) {
// 所有订单数据读取完毕
System.out.println("Game over");
}
}).sheet().doRead();
// 遍历
for(Order order : orderList) {
System.out.println(order);
}
2.3 POI 使用SXSSFWorkbook实现类和EasyExcel 写入100w数据时间对比
使用EasyExce
使用SXSSFWorkbook实现类
2.4 POI使用XSSFWorkbook实现类和使用SXSSFWorkbook实现类写入10w数据时间对比
使用XSSFWorkbook实现类
使用SXSSFWorkbook实现类
最后
以上就是慈祥星星为你收集整理的java解析或创建Excel文件使用Apach POI进行Excel文件的解析超大Excel文件读写的全部内容,希望文章能够帮你解决java解析或创建Excel文件使用Apach POI进行Excel文件的解析超大Excel文件读写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复