处理excel文件需要用到的包ApachepPOL和EasyExcel;
Apacheppol:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
目前多彩用xssf;
需要导入的相关类包 。
workbook;(Excel文件)
- 创建excel文件
// 输出流
FileOutputStream fos = new FileOutputStream("c:\test\temp.xlsx");
// Excel文件对象
Workbook workbook = new XSSFWorkbook();
// 通过输出流进行写入
workbook.write(fos);
// 关闭资源
fos.close();
workbook.close(); - 加载excel文件
// 输入流
FileInputStream fis = new FileInputStream("c:\test\1627356554991.xlsx");
// Excel文件对象
Workbook workbook = new XSSFWorkbook(fis);
sheet:(电子版面)
- 创建单元格
// 按照默认名称创建工作簿
Sheet sheet1 = workbook.createSheet();
// 按照自定义名称创建工作簿
Sheet sheet2 = workbook.createSheet("自定义工作簿2"); - 获取单元格
// 按照工作簿下标获取Sheet
Sheet sheet01 = workbook.getSheetAt(0);
// 按照工作簿名称获取Sheet
Sheet sheet02 = workbook.getSheet("Sheet0"); - 获取单元格数量
int n = workbook.getNumberOfSheets();
row(数据行)
- 创建数据行
Row row = sheet.createRow(0);
- 获取首行下标
int first = sheet.getFirstRowNum();
- 获取尾行下标
int last = sheet.getLastRowNum();
- 根据下标获取指定行
Row row = sheet.getRow(0);
- 遍历所有行
for(Row row : sheet) {
System.out.println(row);
} - 遍历指定区域行
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
System.out.println(row);
}
cell(单元格)
- 创建单元格
Cell cell0 = row.createCell(0);
- 设置单元格值
cell0.setCellValue(UUID.randomUUID().toString());
- 根据下标获取单元格
Cell cell = row.getCell(1);
- 遍历所有单元格
for(Cell cell : row) {
} - 获取单元格类型
CellType type = cell.getCellType();
- 获取单元格样式
// 创建单元格样式
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()); // 保存当前日期时间至本单元格
- 设置单元格对齐
// 创建单元格样式
CellStyle cellStyle = workbook.createCellStyle();
//设置单元格的水平对齐类型。 此时水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置单元格的垂直对齐类型。 此时垂直靠底边
cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);
在遇到超大文件的时候哟部分使用sxssf; 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();
} 会遇到很多种情况如内存溢出;
Easyexcel:(超大文件写入方式)
// 输出流
FileOutputStream fos = new FileOutputStream("c:\test\temp.xlsx");
// Excel文件对象
Workbook workbook = new XSSFWorkbook();
// 通过输出流进行写入
workbook.write(fos);
// 关闭资源
fos.close();
workbook.close(); - 创建单元格
// 按照默认名称创建工作簿 Sheet sheet1 = workbook.createSheet(); // 按照自定义名称创建工作簿 Sheet sheet2 = workbook.createSheet("自定义工作簿2"); - 获取单元格
// 按照工作簿下标获取Sheet Sheet sheet01 = workbook.getSheetAt(0); // 按照工作簿名称获取Sheet Sheet sheet02 = workbook.getSheet("Sheet0"); - 获取单元格数量
int n = workbook.getNumberOfSheets();row(数据行)
- 创建数据行
Row row = sheet.createRow(0);
- 获取首行下标
int first = sheet.getFirstRowNum();
- 获取尾行下标
int last = sheet.getLastRowNum();
- 根据下标获取指定行
Row row = sheet.getRow(0);
- 遍历所有行
for(Row row : sheet) { System.out.println(row); } - 遍历指定区域行
for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); System.out.println(row); }
- 创建单元格
Cell cell0 = row.createCell(0);
- 设置单元格值
cell0.setCellValue(UUID.randomUUID().toString());
- 根据下标获取单元格
Cell cell = row.getCell(1);
- 遍历所有单元格
for(Cell cell : row) { } - 获取单元格类型
CellType type = cell.getCellType();
- 获取单元格样式
// 创建单元格样式 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()); // 保存当前日期时间至本单元格 - 设置单元格对齐
// 创建单元格样式 CellStyle cellStyle = workbook.createCellStyle(); //设置单元格的水平对齐类型。 此时水平居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); // 设置单元格的垂直对齐类型。 此时垂直靠底边 cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);
在遇到超大文件的时候哟部分使用sxssf;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(); }会遇到很多种情况如内存溢出;
相关包;
使用easyexcel写入百万数据:
package liuzhen05;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.excel.EasyExcel;
public class Demo {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
// 写入100w
EasyExcel.write("d:\text\10w.xlsx", Order.class)
.sheet("订单列表")
.doWrite(data());
long end = System.currentTimeMillis();
System.out.println("共耗时"+(end-begin)+"毫秒");
}
// 创建100w条订单数据
private static List data() {
List list = new ArrayList();
for (int i = 0; i < 1000000; i++) {
list.add(new Order());
}
return list;
}
}



