Java Web使用POI导出Excel的方法详解
发布时间 - 2026-01-11 01:38:41 点击率:次本文实例讲述了Java Web使用POI导出Excel的方法。分享给大家供大家参考,具体如下:

采用Spring mvc架构:
Controller层代码如下
@Controller
public class StudentExportController{
@Autowired
private StudentExportService studentExportService;
@RequestMapping(value = "/excel/export")
public void exportExcel(HttpServletRequest request, HttpServletResponse response)
throws Exception {
List<Student> list = new ArrayList<Student>();
list.add(new Student(1000,"zhangsan","20"));
list.add(new Student(1001,"lisi","23"));
list.add(new Student(1002,"wangwu","25"));
HSSFWorkbook wb = studentExportService.export(list);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=student.xls");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}
}
Service层代码如下:
@Service
public class StudentExportService {
String[] excelHeader = { "Sno", "Name", "Age"};
public HSSFWorkbook export(List<Campaign> list) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Campaign");
HSSFRow row = sheet.createRow((int) 0);
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
for (int i = 0; i < excelHeader.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(style);
sheet.autoSizeColumn(i);
}
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
Student student = list.get(i);
row.createCell(0).setCellValue(student.getSno());
row.createCell(1).setCellValue(student.getName());
row.createCell(2).setCellValue(student.getAge());
}
return wb;
}
}
前台的js代码如下:
<script>
function exportExcel(){
location.href="excel/export" rel="external nofollow" ;
<!--这里不能用ajax请求,ajax请求无法弹出下载保存对话框-->
}
</script>
设置Excel样式以及注意点:
String[] excelHeader = { "所属区域(地市)", "机房", "机架资源情况", "", "", "", "",
"", "端口资源情况", "", "", "", "", "", "机位资源情况", "", "", "设备资源情况",
"", "", "IP资源情况", "", "", "", "", "网络设备数" };
String[] excelHeader1 = { "", "", "总量(个)", "空闲(个)", "预占(个)", "实占(个)",
"自用(个)", "其它(个)", "总量(个) ", "在用(个)", "空闲(个)", "总带宽(M)",
"在用带宽(M)", "空闲带宽(M)", "总量(个)", "在用(个)", "空闲(个)", "设备总量(个)",
"客户设备(个)", "电信设备(个)", "总量(个)", "空闲(个)", "预占用(个)", "实占用(个)",
"自用(个)", "" };
// 单元格列宽
int[] excelHeaderWidth = { 150, 120, 100, 100, 100, 100, 100, 100, 100,
100, 100, 120, 120, 120, 120, 120, 120, 150, 150, 150, 120,
120, 150, 150, 120, 150 };
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("机房报表统计");
HSSFRow row = sheet.createRow((int) 0);
HSSFCellStyle style = wb.createCellStyle();
// 设置居中样式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
// 设置合计样式
HSSFCellStyle style1 = wb.createCellStyle();
Font font = wb.createFont();
font.setColor(HSSFColor.RED.index);
font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 粗体
style1.setFont(font);
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
// 合并单元格
// first row (0-based) last row (0-based) first column (0-based) last
// column (0-based)
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 2, 7));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 8, 13));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 14, 16));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 17, 19));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 20, 24));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 25, 25));
// 设置列宽度(像素)
for (int i = 0; i < excelHeaderWidth.length; i++) {
sheet.setColumnWidth(i, 32 * excelHeaderWidth[i]);
}
// 添加表格头
for (int i = 0; i < excelHeader.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(style);
}
row = sheet.createRow((int) 1);
for (int i = 0; i < excelHeader1.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelHeader1[i]);
cell.setCellStyle(style);
}
注意点1:合并单元格 new CellRangeAddress(int,int,int,int)
first row (0-based) ,last row (0-based), first column (0-based),last column (0-based)
注意点2:合并单元格
String[] excelHeader = { "所属区域(地市)", "机房", "机架资源情况", "", "", "", "","", "端口资源情况", "", "", "", "", "", "机位资源情况", "", "", "设备资源情况","", "", "IP资源情况", "", "", "", "", "网络设备数" };
合并以后的单元格虽然是一个,但是仍然要保留其单元格内容,此处用空字符串代替,否则后续表头显示不出
注意点3:填充单元格
正确写法:
HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader1[i]); cell.setCellStyle(style);
错误写法:
row.createCell(i).setCellValue(excelHeader1[i]); row.createCell(i).setCellStyle(style);
本人为了省一个HSSFCell对象,使用了错误写法,导致HSSFCell对象创建了2次,最后只保留了样式,而内容无法显示
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java文件与目录操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
# Java
# Web
# POI
# 导出
# Excel
# Java利用POI实现导入导出Excel表格示例代码
# java poi导出图片到excel示例代码
# Java使用POI实现导出Excel的方法详解
# Java使用poi组件导出Excel格式数据
# Java使用POI导出大数据量Excel的方法
# Java中利用POI优雅的导出Excel文件详解
# Java中用POI实现将数据导出到Excel
# java poi导出excel时如何设置手动换行
# Java使用Poi导出Excel表格方法实例
# 单元格
# 是一个
# 操作技巧
# 相关内容
# 不出
# 感兴趣
# 数据结构
# 给大家
# 弹出
# 不能用
# 更多关于
# 留了
# 所述
# 对话框
# 程序设计
# 粗体
# 格列
# 使用了
# 讲述了
# 空字符串
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel如何实现文件上传和存储?(本地与S3配置)
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
原生JS获取元素集合的子元素宽度实例
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何在阿里云购买域名并搭建网站?
Python制作简易注册登录系统
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
使用spring连接及操作mongodb3.0实例
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何在Windows 2008云服务器安全搭建网站?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Android实现代码画虚线边框背景效果
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
JavaScript如何实现倒计时_时间函数如何精确控制
百度浏览器如何管理插件 百度浏览器插件管理方法
如何自定义建站之星网站的导航菜单样式?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何快速辨别茅台真假?关键步骤解析
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何确保FTP站点访问权限与数据传输安全?
如何在云服务器上快速搭建个人网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何使用Blade模板引擎?(完整语法和示例)
如何用VPS主机快速搭建个人网站?
LinuxCD持续部署教程_自动发布与回滚机制
如何获取PHP WAP自助建站系统源码?
Laravel Fortify是什么,和Jetstream有什么关系
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何在景安云服务器上绑定域名并配置虚拟主机?
北京的网站制作公司有哪些,哪个视频网站最好?
千库网官网入口推荐 千库网设计创意平台入口
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
网站制作壁纸教程视频,电脑壁纸网站?
canvas 画布在主流浏览器中的尺寸限制详细介绍
phpredis提高消息队列的实时性方法(推荐)
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel怎么实现模型属性的自动加密
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
济南网站建设制作公司,室内设计网站一般都有哪些功能?

