一、Apache - poi
1.Apache - poi是java编写的免费开源的跨平台的Java-API,Java-POI,提供给java程序的Microsoft Office格式档案进行读写功能的API开源类库
2.提供不同文件格式的解析:
HSSF
XSSF:Workbook对象实现它
eg:Workbook workbook = new XSSFWorkbook(传入excel路径文件流);
3.方法:
读:Workbook workbook = new XSSFWorkbook(new FileInputStream("D:\1627356552686.xlsx"));
()将Workbook对象中包含的数据,通过输出流,写入至Excel
workbook.write(out);
(1)sheet:工作簿
获取工作簿数量
Sheet sheet0 = workbook.getSheet("Sheet0");
Sheet sheet1 = workbook.getSheetAt(0);
System.out.println("工作簿1中的数据行:" + sheet0.getLastRowNum());
System.out.println("工作簿2中的数据行:" + sheet1.getLastRowNum());
(2)根据下标获取指定行
Row row = sheet.getsheeAt(0);//第一行下标为0
(2.1)遍历所有行
for(Row row : sheet) {
System.out.println(row);
}
(2.2)遍历所有区域行
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
System.out.println(row);
}
(3)根据下标获取指定单元格
Cell cell = row.getCell(0);//第一个下标为0
(3.1)获得单元格内的值
cell.getStringCellValue();
(3.1)遍历所有单元格
for(Cell cell : row) {
}
注意:返回值为数字时调用cell.getNumericCellValue();此方法返回值为double
写:Workbook workbook = new XSSFWorkbook(FileOutputStream out = new FileOutputStream("D:\1\demo.xlsx"));
(1)创建sheet工作簿
sheet sheet0 = workbook.createSheet();
Sheet sheet1 = workbook.createSheet();
Sheet sheet2 = workbook.createSheet();
(2) 创建数据行Row
Row row = sheet0.createRow(0);
(3) 创建单元格
Cell cell0 = row.createCell(0);
创建单元格的值
cell0.setCellValue();
(4)创建单元格格式
获取格式编码
// 创建单元格样式
DataFormat dataFormat = workbook.createDataFormat();
Short formatCode = dataFormat.getFormat("yyyy-MM-dd HH:mm:ss");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(formatCode);
// ...
// 为当前行创建单元格
Cell cell1 = row.createCell(1);
cell1.setCellStyle(cellStyle); // 设置单元格样式
cell1.setCellValue(new Date()); // 保存当前日期时间至本单元格
(5)获取列头
Row headRow = sheet.getRow(0);
遍历列头单元格
for(Cell headCell : headRow) {
System.out.print(headCell + "t");
}
(6)获取当前单元格类型(运用switch循环可以跟单元格类型匹配填入相应的单元格中)
CellType type = cell.getCellType();
例如;根据当前单元格的类型获取其中的值
switch(cellType) { case STRING: String strVal = cell.getStringCellValue(); System.out.print(strVal + "t"); break; case NUMERIC: double numVal = cell.getNumericCellValue(); System.out.print(numVal + "t"); break; } }
(7) 在“已存在”的Excel文件中,创建新的sheet
Sheet sheet = workbook.createSheet();//每运行一遍程序,创建一个新的sheet
(8)设置单元格对其
// 创建单元格样式 CellStyle cellStyle = workbook.createCellStyle(); //设置单元格的水平对齐类型。 此时水平居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); // 设置单元格的垂直对齐类型。 此时垂直靠底边 cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);
二、在要读写超大Excel文件使使用SXSSF和easyExcel
1.SXSSF类(Workbook workbook = new SXSSFWorkbook(100);
FileOutputStream out = new FileOutputStream("D:\1\100w.xlsx"))
............
写入文件
workbook.write(out);
2.easyExcel
详细内容看https://blog.csdn.net/weixin_49187233/article/details/125772491?utm_source=app&app_version=5.6.1



