使用办公文档插件:
文件-------HSSFWorkbook
页----------HSSFSheet
行----------HSSFRow
列----------HSSFCell
样式--------HSSFCellStyle
1.使用apache-poi生成excel:
1).导入依赖:
<!--poi依赖-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
2).使用封装类生成excel文件:
//使用apache-poi生成excel文件
public class CreateExcelTest {
public static void main(String[] args) throws IOException {
//创建HSSFWorkbook对象,对应一个excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//使用wb创建HSSFSheet对象。对应wb文件中的一页
HSSFSheet sheet = wb.createSheet("学生列表");
//使用sheet创建HSSFRow对象,对应sheet中的一行
HSSFRow row = sheet.createRow(0);//行号:从0开始依次增加
//使用row创建HSSFCell对象,对row中的列
HSSFCell cell = row.createCell(0);//列的编号:从0开始依次增加
cell.setCellValue("学号");
cell = row.createCell(1);
cell.setCellValue("姓名");
cell = row.createCell(2);
cell.setCellValue("年龄");
//生成HSSFCellStyle对象
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);//对齐方式
//使用sheet创建10个HSSFRow对象,对应sheet中的10行
for(int i=1;i<=10;i++){
row = sheet.createRow(i);
//使用row创建HSSFCell对象,对row中的列
cell = row.createCell(0);//列的编号:从0开始依次增加
cell.setCellValue(100+i);
cell = row.createCell(1);
cell.setCellValue("NAME"+i);
cell = row.createCell(2);
cell.setCellStyle(style);
cell.setCellValue(20+i);
}
//调用工具函数生成excel文件
OutputStream os = new FileOutputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");//目录必须手动创建好,文件名可以自动生成
wb.write(os);
//关闭流资源
os.close();
wb.close();
System.out.println("===========ok==============");
}
}
2.导出下载文件
1)test类测试用Java生成excel文件
//使用apache-poi生成excel文件
public class CreateExcelTest {
public static void main(String[] args) throws IOException {
//创建HSSFWorkbook对象,对应一个excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//使用wb创建HSSFSheet对象。对应wb文件中的一页
HSSFSheet sheet = wb.createSheet("学生列表");
//使用sheet创建HSSFRow对象,对应sheet中的一行
HSSFRow row = sheet.createRow(0);//行号:从0开始依次增加
//使用row创建HSSFCell对象,对row中的列
HSSFCell cell = row.createCell(0);//列的编号:从0开始依次增加
cell.setCellValue("学号");
cell = row.createCell(1);
cell.setCellValue("姓名");
cell = row.createCell(2);
cell.setCellValue("年龄");
//生成HSSFCellStyle对象
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);//对齐方式
//使用sheet创建10个HSSFRow对象,对应sheet中的10行
for(int i=1;i<=10;i++){
row = sheet.createRow(i);
//使用row创建HSSFCell对象,对row中的列
cell = row.createCell(0);//列的编号:从0开始依次增加
cell.setCellValue(100+i);
cell = row.createCell(1);
cell.setCellValue("NAME"+i);
cell = row.createCell(2);
cell.setCellStyle(style);
cell.setCellValue(20+i);
}
//调用工具函数生成excel文件
OutputStream os = new FileOutputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");//目录必须手动创建好,文件名可以自动生成
wb.write(os);
//关闭流资源
os.close();
wb.close();
System.out.println("===========ok==============");
}
}
2)前端jsp例子
<script type="text/javascript">
$(function (){
//给下载按钮添加事件
$("#fileDownloadBtn").click(function (){
//发送文件下载的请求
//所有文件下载的请求只能发同步请求。!!!!!
window.location.href="workbench/activity/fileDownload.do";
})
})
</script>
3)controller类接收响应,现把文件读取到服务器中,再发送到浏览器进行下载
//文件下载上传
@RequestMapping("/workbench/activity/fileDownload.do")
public void fileDownload(HttpServletResponse response) throws IOException {
//1.设置响应类型
response.setContentType("application/octet-stream;charset=UTF-8");
//2.获取输出流
//response.getWriter()//这个是以字符的形式传输的,这种一般是之前的HTML文件那些
OutputStream out = response.getOutputStream();//这个是以字节的形式传输的,传输的是现在表格等
//浏览器接收到响应信息之后,默认情况下,都会在浏览器窗口打开响应信息。
// 即使打不开,也会调用应用程序来打开;只有实在打不开才会激活文件下载窗口
//可以设置响应头信息,使浏览器接收响应信息直接激活下载窗口
response.addHeader("Content-Disposition","attachment;filename=mystudentList.xls");
//读取excel文件(InputStream),把输出到浏览器(OutoutStream)
InputStream is = new FileInputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");
byte[] buff=new byte[256];
int len=0;
while ((len=is.read(buff))!=-1){
out.write(buff,0,len);
}
//关闭资源
is.close();
out.flush();
}