依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
/**
* 生成Excel表
* @param response
* @param dataList 表格数据
* List<String[]> dataList = new ArrayList<>();
* List<Map<String, Object>> results = service.findAll();
* for (Map<String, Object> result : results) {
* String[] data = new String[header.length];
*
* for (int i = 0; i < header.length; i++) {
* if (result.get(header[i]) != null)
* //一行中所有单元格数据
* data[i] = result.get(header[i]).toString();
* }
* dataList.add(data);
*
* }
* @param header 表头
* @param name 表名
* @throws IOException
*/
public void writeToExcel(HttpServletResponse response, List<String[]> dataList, String[] header,String name) throws IOException{
//声明一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFCellStyle style = workbook.createCellStyle();
//生成一个表格,设置表格名称为"UserData"
HSSFSheet sheet = workbook.createSheet(name);
//设置表格列宽度为10个字节
sheet.setDefaultColumnWidth(10);
//创建第一行表头
HSSFRow headrow = sheet.createRow(0);
// 遍历添加表头
for (int i = 0; i < header.length; i++) {
//创建一个单元格
HSSFCell cell = headrow.createCell(i);
//创建一个内容对象
HSSFRichTextString text = new HSSFRichTextString(header[i]);
//将内容对象的文字内容写入到单元格中
cell.setCellValue(text);
}
//模拟遍历结果集,把内容加入表格
int temp = 1;
for (String[] data : dataList) {
HSSFRow row = sheet.createRow(temp++);
for (int i = 0; i < data.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(data[i]);
cell.setCellValue(text);
}
}
//准备将Excel的输出流通过response输出到页面下载
//八进制输出流
response.setContentType("application/octet-stream");
//这后面可以设置导出Excel的名称,此例中名为userData.xls
response.setHeader("Content-disposition", "attachment;filename="+name+".xls");
//刷新缓冲
response.flushBuffer();
//workbook将Excel写入到response的输出流中,供页面下载
workbook.write(response.getOutputStream());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?