import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.junit.Test;
public class ExcelExport {
@Test
public void createExcel() throws IOException {
//创建HSSFWorkbook对象(excel的文档对象)
HSSFWorkbook wb = new HSSFWorkbook();
//建立新的sheet对象(excel的表单)
HSSFSheet sheet = wb.createSheet("成绩表");
//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
HSSFRow row1 = sheet.createRow(0);
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell = row1.createCell(0);
//设置单元格内容
cell.setCellValue("时间");
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0,1,0,0));
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell12 = row1.createCell(1);
//设置单元格内容
cell12.setCellValue("数据1");
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0,0,1,2));
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell13 = row1.createCell(3);
//设置单元格内容
cell13.setCellValue("数据2");
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0,0,3,4));
//在sheet里创建第二行,通过索引控制位置,
HSSFRow row2 = sheet.createRow(1);
row2.createCell(1).setCellValue("数据11");//createCell(1)位置
row2.createCell(2).setCellValue("数据22");
row2.createCell(3).setCellValue("数据33");
row2.createCell(4).setCellValue("数据44");
//在sheet里创建第三行,填充数据
HSSFRow row3 = sheet.createRow(2);
row3.createCell(0).setCellValue("2018-06-07");
row3.createCell(1).setCellValue(100);
row3.createCell(2).setCellValue(87);
row3.createCell(3).setCellValue(90);
row3.createCell(4).setCellValue(78);
//输出
FileOutputStream outputStream = new FileOutputStream(new File("d:\\成绩表.xls"));
wb.write(outputStream);
outputStream.close();
/**
//输出Excel文件
OutputStream output=response.getOutputStream();
//代码转中文名称
response.addHeader("Content-Disposition", "attachment;filename="+new String ("中文名称".getBytes(),"iso-8859-1")+".xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
**/
}
}
结果:
注意点:(1)前端页面调用的时候,不能用ajax请求,ajax的返回值类型是json,text,html,xml类型,不是流类型,所以无法实现文件下载。
a、隐藏表单,用提交表单的形式;
b、用window.open() 或 window.location.href();
c、创建iframe,iframe的src可以是文件地址url来直接下载文件
参考:http://langgufu.iteye.com/blog/2076373
(2)导出文件名称可能会出现中文乱码,需要转码,
(3)注意表头索引位置