导出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