POI 导出复杂表格(提供思路)

导出表格之前必须要理解的几个概念

ps:理解了原理可以自由发挥写出自己想要的表格
  1. 工作蒲:
    HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls ,行数有限,最大为65535,由于数量有限因此一般不会发生OOM(内存不足的异常)
    XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx,数据量无限,有可能会出现OOM内存溢出异常,在一些较老的设备可能不支持,安卓APP导出的时候可能也会不支持,会找不到一些库

    // 新建一个工作蒲
    HSSFWorkbook workbook = new HSSFWorkbook();
    
  2. HSSFSheet:表格

    // 创建一个表格
    HSSFSheet sheet = workbook.createSheet("订单信息");
    

    在这里插入图片描述

  3. HSSFRow:行

    // rowIndex是行号,第几行,从0开始
    // 创建行
    HSSFRow row = sheet.createRow(rowIndex);
    // 获取行
    HSSFRow currentRow = sheet.getRow(rowIndex);
    
  4. HSSFCell:列

    // 创建一列,cellIndex是列号,从0开始
    // 通过行currentRow和cell就能定位到一个单元格,写入数据即可
    HSSFCell cell = currentRow.createCell(cellIndex);
    
  5. HSSFFont:字体

  6. HSSFDataFormat :单元格的日期格式

  7. HSSFHeader :sheet的页眉

  8. HSSFFooter:sheet的页脚

  9. HSSFCellStyle:单元格样式

  10. HSSFDateUtil:日期

示例代码

package com.example.testdemo;

import android.os.Environment;
import android.util.Log;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Classname com.example.testdemo RecordExport
 * @Description 测试记录表格导出
 * @Date 2023/8/30 15:11
 * @Created by 15267
 */
public class RecordExcelExport {
    
    

    public static List<BatteryParamVO> list = new ArrayList<>();
    public static List<String> snList = new ArrayList<>();

    private static final String[] FIELD_NAMES = new String[]{
    
    "sn", "relativeCharge", "absoluteCharge", "health",
            "voltage", "remainCapacity", "operationStatus", "temperature", "date"};

    public static void export() {
    
    
        String fileName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/Q729_Battery_Test_Record.xls";
        Log.i("", " fileName = " + fileName);
        File file = new File(fileName);
        HSSFWorkbook workbook = new HSSFWorkbook();
        try {
    
    
            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
            HSSFSheet sheet = workbook.createSheet("测试结果");

            // 创建表头
            setHeader(sheet, workbook);

            // 创建行
            for (int i = 0; i < list.size(); i++) {
    
    
                HSSFRow row = sheet.createRow(i + 1);
                // 数据实体类
                BatteryParamVO batteryParamVO = list.get(i);
                // 创建列
                row.createCell(0).setCellValue(batteryParamVO.getSn());
                row.createCell(1).setCellValue(batteryParamVO.getRelativeCharge());
                row.createCell(2).setCellValue(batteryParamVO.getAbsoluteCharge());
                row.createCell(3).setCellValue(batteryParamVO.getHealth());
                row.createCell(4).setCellValue(batteryParamVO.getVoltage());
                row.createCell(5).setCellValue(batteryParamVO.getRemainCapacity());
                row.createCell(6).setCellValue(batteryParamVO.getOperationStatus() ? "正常" : "异常");
                row.createCell(7).setCellValue(batteryParamVO.getTemperature());
                row.createCell(8).setCellValue(DateTimeUtil.formatDate(batteryParamVO.getDate()));
            }

            for (int i = 0; i < 9; i++) {
    
    
                sheet.setColumnWidth(i, 20 * 256);
            }

            // 写入文件
            workbook.write(outputStream);
            workbook.close();
            outputStream.flush();
            outputStream.close();
        } catch (FileNotFoundException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

    }


    public static void setHeader(HSSFSheet sheet, HSSFWorkbook workbook) {
    
    
        HSSFRow row = sheet.createRow(0);
        for (int i = 0; i < FIELD_NAMES.length; i++) {
    
    
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(FIELD_NAMES[i]);
        }
    }



}

猜你喜欢

转载自blog.csdn.net/qq_42071369/article/details/121931180