POI导出Excel表格

导出excel表格在日常工作中经常用到,这里是一个小例子,HSSF只适用于小数据量,因为他是一次性将需要导出的内容全部写到内存中,在一次性写入Excel中:

public class ExportExcelHSSF {

public static void main(String[] args) throws IOException {
// 创建文件输出流导出的excel存储的位置
FileOutputStream out = new FileOutputStream("d:/workbook.xls");
// 创建一个工作簿
Workbook wb = new HSSFWorkbook();
CellStyle cellStyle = wb.createCellStyle();    //设置单元格样式   
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 居中  
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直
//创建一个表头,表头的内容
String handInfo = "a,b,c,d";
String[] handArray = handInfo.split(",");
Sheet s = wb.createSheet();//创建1个sheet
//合并单元格
CellRangeAddress region1 = new CellRangeAddress(0, 3, (short) 0, (short) 0); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
//设置单元格样式,进行合并
s.addMergedRegion(region1);  
wb.setSheetName(0,"sheet");//指定sheet的名称
Row r = s.createRow(0); //创建第一行
HSSFCell content = (HSSFCell) r.createCell(0); //创建第一个单元格
//先把表头写进excel
for(int i = 0; i < handArray.length; i++) {
content = (HSSFCell) r.createCell(i);
HSSFRichTextString is = new HSSFRichTextString(handArray[i]);
content.setCellValue(is);
}

for (int j = 0; j < 1; j++) {
//xls文件最大支持65536行
for (int rownum = 1; rownum < 20; rownum++) {//创建行,.xls一个sheet中的行数最大65535
// 创建一行
r = s.createRow(rownum);
for (int cellnum = 0; cellnum < 10; cellnum ++) {//一行创建10个单元格
// 在行里边创建单元格
Cell c = r.createCell(cellnum);
//向单元格写入数据
c.setCellValue(cellnum);
}
}
}
System.out.println("int..............");
wb.write(out);//输出文件内容

try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.close();
}

}



这种是使用SXSSF导出,效率会比HSSF低,但是不用担心由于数据量过大,而导致的内存泄露问题
/**
 * 采用SXSSF导出excel不出现内存溢出
 * @author mrt
 *
 */
public class WriteExcelSXSSF1 {


public static void main(String[] args) throws Throwable {

//创建一个SXSSFWorkbook
SXSSFWorkbook wb = new SXSSFWorkbook(-1); // turn off auto-flushing and accumulate all rows in memory
//创建一个sheet
Sheet sh = wb.createSheet();
    for(int rownum = 0; rownum < 100000; rownum++){
    //创建一个行
        Row row = sh.createRow(rownum);
        for(int cellnum = 0; cellnum < 10; cellnum++){//创建单元格
            Cell cell = row.createCell(cellnum);
            String address = new CellReference(cell).formatAsString();//单元格地址
            cell.setCellValue(address);
        }


       // manually control how rows are flushed to disk 
       if(rownum % 10000 == 0) {//一万行向磁盘写一次
      
            ((SXSSFSheet)sh).flushRows(100); // retain 100 last rows and flush all others
            //Thread.sleep(1000);
            System.out.println("写入....");
            // ((SXSSFSheet)sh).flushRows() is a shortcut for ((SXSSFSheet)sh).flushRows(0),
            // this method flushes all rows
       }


    }
    FileOutputStream out = new FileOutputStream("d:/test.xlsx");
    wb.write(out);//将临时文件合并,写入最终文件
    
    out.close();


    // dispose of temporary files backing this workbook on disk
    wb.dispose();


}

}


更详细的操作清访问https://blog.csdn.net/m0_37899388/article/details/72778348?locationNum=5&fps=1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值