导出表格之前必须要理解的几个概念
ps:理解了原理可以自由发挥写出自己想要的表格
-
工作蒲:
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls ,行数有限,最大为65535,由于数量有限因此一般不会发生OOM(内存不足的异常)
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx,数据量无限,有可能会出现OOM内存溢出异常,在一些较老的设备可能不支持,安卓APP导出的时候可能也会不支持,会找不到一些库// 新建一个工作蒲 HSSFWorkbook workbook = new HSSFWorkbook();
-
HSSFSheet:表格
// 创建一个表格 HSSFSheet sheet = workbook.createSheet("订单信息");
-
HSSFRow:行
// rowIndex是行号,第几行,从0开始 // 创建行 HSSFRow row = sheet.createRow(rowIndex); // 获取行 HSSFRow currentRow = sheet.getRow(rowIndex);
-
HSSFCell:列
// 创建一列,cellIndex是列号,从0开始 // 通过行currentRow和cell就能定位到一个单元格,写入数据即可 HSSFCell cell = currentRow.createCell(cellIndex);
-
HSSFFont:字体
-
HSSFDataFormat :单元格的日期格式
-
HSSFHeader :sheet的页眉
-
HSSFFooter:sheet的页脚
-
HSSFCellStyle:单元格样式
-
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]);
}
}
}