Java中的文件处理————Excel

68 阅读1分钟

处理excel文件需要用到的包ApachepPOL和EasyExcel;

Apacheppol:

HSSF - 提供读写Microsoft Excel格式档案的功能。

XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。

HWPF - 提供读写Microsoft Word格式档案的功能。

HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

HDGF - 提供读写Microsoft Visio格式档案的功能。

目前多彩用xssf;

需要导入的相关类包 。

workbook;(Excel文件)

1.创建excel文件

// 输出流
FileOutputStream fos = new FileOutputStream("c:\\test\\temp.xlsx");
 
// Excel文件对象
Workbook workbook = new XSSFWorkbook();
 
// 通过输出流进行写入
workbook.write(fos);
 
// 关闭资源
fos.close();
workbook.close();

2.加载excel文件

// 输入流
FileInputStream fis = new FileInputStream("c:\\test\\1627356554991.xlsx");
 
// Excel文件对象
Workbook workbook = new XSSFWorkbook(fis);

sheet:(电子版面)

1.创建单元格

// 按照默认名称创建工作簿
Sheet sheet1 = workbook.createSheet();
 
// 按照自定义名称创建工作簿
Sheet sheet2 = workbook.createSheet("自定义工作簿2");

2.获取单元格

// 按照工作簿下标获取Sheet
Sheet sheet01 = workbook.getSheetAt(0);
 
// 按照工作簿名称获取Sheet
Sheet sheet02 = workbook.getSheet("Sheet0");

3.获取单元格数量

int n = workbook.getNumberOfSheets();

row(数据行)

1.创建数据行

Row row = sheet.createRow(0);

2.获取首行下标

int first = sheet.getFirstRowNum();

3.获取尾行下标

int last = sheet.getLastRowNum();

4.根据下标获取指定行

Row row = sheet.getRow(0);

5.遍历所有行

for(Row row : sheet) {
    System.out.println(row);
}

6.遍历指定区域行

for (int i = 1; i <= sheet.getLastRowNum(); i++) {
    Row row = sheet.getRow(i);
    System.out.println(row);
}

cell(单元格)

1.创建单元格

Cell cell0 = row.createCell(0);

2.设置单元格值

cell0.setCellValue(UUID.randomUUID().toString());

3.根据下标获取单元格

Cell cell = row.getCell(1);

4.遍历所有单元格

for(Cell cell : row) {
                
}

5.获取单元格类型

CellType type = cell.getCellType();

6.获取单元格样式

// 创建单元格样式
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()); // 保存当前日期时间至本单元格

7.设置单元格对齐

// 创建单元格样式
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:(超大文件写入方式)

相关包;

使用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<Order> data() {
        List<Order> list = new ArrayList<Order>();
        for (int i = 0; i < 1000000; i++) {
            list.add(new Order());
        }
        return list;
        
    }
}