Java读写excel的两种方式
(1)apache poi
(2)alibaba easyexcel
两种方式写入excel的区别;
poi会先把所有的数据读入到内存中,然后写入到excel中;easyexcel则是把数据一条一条写入excel中。所以如果有大量数据时,比如有100w条数据写入excel中,使用poi会先把数据读入内存中,可能会造成内存溢出;而easyexcel则把数据一条一条写入excel中。*
POI操作excel
依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
excel有03和07两个版本,所以使用poi读写excel也略有区别。
(1)03版本excel文件后缀名.xls,最多能写入65535条数据;07版本excel文件后缀名.xlsx,理论上能写更多条数据,但是使用普通对象写入excel消耗时间更长,大量写入可以使用SXSSFWorkbook;
(2)03和07版本excel创建对象不同,03版本创建HSSFWorkbook对象,07版本创建XSSFWorkbook对象,大量数据读写使用SXSSFWorkbook;
建立Excel常用对象
1 HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
2 HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象
3 HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
4 cellStyle = wb.createCellStyle();//创建单元格样式
5 row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
6 row.createCell((short)0).setCellValue(1); //设置Excel工作表的值
得到Excel常用对象
1 FileInputStream fis = new FileInputStream(new File("D:/1.xlsx"));
2 //得到Excel工作簿对象
3 HSSFWorkbook wb = new HSSFWorkbook(fis);
4 //得到Excel工作表对象
5 HSSFSheet sheet = wb.getSheetAt(0);
6 //得到Excel工作表的行
7 HSSFRow row = sheet.getRow(i);
8 //得到Excel工作表指定行的单元格
9 HSSFCell cell = row.getCell((short) j);
10 cellStyle = cell.getCellStyle();//得到单元格样式
设置sheet名称和单元格内容
1 wb.setSheetName(1, "第一张工作表",HSSFCell.ENCODING_UTF_16);
2 cell.setEncoding((short) 1);
3 cell.setCellValue("单元格内容");
取得sheet的数目
1 wb.getNumberOfSheets()
根据index取得sheet对象
1 HSSFSheet sheet = wb.getSheetAt(0);
取得有效的行数
1 int rowcount = sheet.getLastRowNum();
取得一行的有效单元格个数
1 row.getLastCellNum();
单元格值类型读写
1 cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型
2 cell.getNumericCellValue();//读取为数值类型的单元格内容
**设置列宽、行高**
1 sheet.setColumnWidth((short)column,(short)width);
2 row.setHeight((short)height);
添加区域,合并单元格
1 Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo
2 ,(short)columnTo);//合并从第rowFrom行columnFrom列
3 sheet.addMergedRegion(region);// 到rowTo行columnTo的区域
4 //得到所有区域
5 sheet.getNumMergedRegions()
保存Excel文件
1 FileOutputStream fileOut = new FileOutputStream(path);
2 wb.write(fileOut);