poi对excel的工作薄等封装成了下列四个对象
工作薄:XSSFWorkBook
工作表:XSSFSheet
行:Row
单元格:Cell
创建工作薄对象,往excel文件中传输数据
public static void main(String[] args) {
File file = new File("D://poi.xlsx");
try {
FileOutputStream fos = new FileOutputStream(file);
//创建工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建单元格
XSSFSheet sheet = workbook.createSheet();
//创建单元行
XSSFRow row = sheet.createRow(0);
//创建具体的单元格
XSSFCell cell = row.createCell(0);
cell.setCellValue("我剑也未尝不利");
workbook.write(fos);
workbook.close();
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
创建工作薄对象,从excel文件中读取数据
public static void main(String[] args) {
File file = new File("D://b.xlsx");
try (FileInputStream fileInputStream = new FileInputStream(file);){
//创建工作薄对象
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
//从工作薄对象中获取调用getSheet()方法,传入要获取的表名返回表对象
XSSFSheet sheet = workbook.getSheet("礼品表");
//双层循环遍历单元格
for (Row row:sheet){
for (Cell cell:row){
System.out.println(cell);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
数据批量导入!
HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的区别:
◎HSSFWorkbook一般用于Excel2003版及更早版本(扩展名为.xls)的导出。
◎XSSFWorkbook一般用于Excel2007版(扩展名为.xlsx)的导出。
◎SXSSFWorkbook一般用于大数据量的导出。
注:HSSFWorkbook和XSSFWorkbook的Excel Sheet导出条数上限(<=2003版)是65535行、256列,(>=2007版)是1048576行,16384列,如果数据量超过了此上限,那么可以使用SXSSFWorkbook来导出。实际上上万条数据,
甚至上千条数据就可以考虑使用SXSSFWorkbook了。SXSSFWorkbook:可以通过构造参数设置每次在内存中保持的行数,当达到这个值的时候,就会把这个值的数据flush()到磁盘上,避免了内存不够的情况。
例子:
向excel中写入了10000条数据
public static void main(String[] args) { try(BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("D://uuid.xlsx"))); //HSSFWorkbook和XSSFWorkbook的Excel Sheet导出条数上限(<=2003版)是65535行、256列,(>=2007版)是 // 1048576行,16384列,如果数据量超过了此上限,那么可以使用SXSSFWorkbook来导出。实际上上万条数据, // 甚至上千条数据就可以考虑使用SXSSFWorkbook了。 SXSSFWorkbook workbook = new SXSSFWorkbook(100); ) { SXSSFSheet sheet = workbook.createSheet(); //创建单元格格式 CellStyle cellStyle = workbook.createCellStyle(); DataFormat dataFormat = workbook.createDataFormat(); short format = dataFormat.getFormat("YYYY年-MM月-dd日"); cellStyle.setDataFormat(format); for (int j=0;j<10000;j++){ SXSSFRow row = sheet.createRow(j); //设置表头 if(j==0){ SXSSFCell cellHeadOne = row.createCell(0); cellHeadOne.setCellValue("序号"); SXSSFCell cellHeadTwo = row.createCell(1); cellHeadTwo.setCellValue("优惠码"); SXSSFCell cellHeadThree = row.createCell(2); cellHeadThree.setCellValue("校验码"); SXSSFCell cellHeadFour = row.createCell(3); cellHeadFour.setCellValue("创建日期"); }else { SXSSFCell cell = row.createCell(0); cell.setCellValue(j); SXSSFCell cell1 = row.createCell(1); cell1.setCellValue(UUID.randomUUID().toString().substring(0,8)); SXSSFCell cell2 = row.createCell(2); cell2.setCellValue(UUID.randomUUID().toString().substring(0,4)); SXSSFCell cell3 = row.createCell(3); cell3.setCellValue(new Date()); cell3.setCellStyle(cellStyle); } } workbook.write(bos); } catch (IOException e) { throw new RuntimeException(e); }