使用poi生成excel,导入jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
生成excel主要的对象是:Workbook 是一个接口,主要有三种创建方式
1,创建2003 版本的excle,后缀 .xls,最多只能存5.6w行,256列左右的数据
Workbook workbook = new XSSFWorkbook();
2,创建2007 及以后的版本, 后缀 .xlsx 可以存104w行,16384列左右的数据,但这种方式数据稍微大一点就会OOM
Workbook workbook = new HSSFWorkbook();
3, 专门用来生成大数据excel,但也会受到 excel 104w 上限的限制
Workbook workbook = new SXSSFWorkbook();
4,生成 .csv 后缀的excel文件, .csv理论上就纯文本,存多少数据都没问题,但数据太大打开会非常慢
用上面三种方式都可以生成
先来看看普通数据的读取,标准 .xls .xlsx 可以直接生成Workbook对象, 但CSV文件是根据特殊字符分割生成数组。
//读取 excel 根据路径生成输入流,获取workbook对象,获取sheet,获取行row,获取列cell
/**
* @param filePath 文件路径
* @param endWith 结束符
* @return
* @throws Exception
*/
public static List<List<List<String>>> readXls(String filePath, String endWith) throws Exception {
InputStream is = null;
try {
is = new FileInputStream(filePath);
//HSSFWorkbook表示整个Excel
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
//循环每一页,并处理当前的循环页
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
//HSSFSheet表示某一页
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
//处理当前页,循环处理每一行的数据
List<List<String>> sheetResult = new ArrayList<>();
for (int rowNumIndex = 0; rowNumIndex <= hssfSheet.getLastRowNum(); rowNumIndex++) {
//HSSFRow表示每一行的数据
HSSFRow hssfRow = hssfSheet.getRow(rowNumIndex);
int minColIx = hssfRow.getFirstCellNum();
int maxColIx = hssfRow.getLastCellNum();
String firstColumn = hssfRow.getCell(0).getStringCellValue();
//结尾符
if (StringUtils.isBlank(firstColumn) ||