Java导出主表和明细Excel

使用POI导出数据库主表和明细数据,原文https://www.cnblogs.com/gudongcheng/p/8268909.html

业务代码

package com.sto.export;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.usermodel.Font;
import org.springframework.stereotype.Service;@Service
public class ExcelExportService {/*** 自定义导出Workbook* @param sheetName sheet名称* @param title 标题* @param values 主单表头名称数据* @param title2  主单导出数据* @param values2 明细表头名称数据* @param wb* @return*/public HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, String[] title2,String[][] values2, HSSFWorkbook wb) {// 第一步,创建一个HSSFWorkbook,对应一个Excel文件if (wb == null) {wb = new HSSFWorkbook();}// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = wb.createSheet(sheetName);for (int i = 0; i < title2.length; i++) {sheet.setColumnWidth(i, 5000);}// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制HSSFRow headRow = sheet.createRow(0);HSSFRow detailRow = sheet.createRow(2);// 第四步,创建单元格,并设置值表头 设置表头居中HSSFCellStyle style = wb.createCellStyle();// style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);Font ztFont = wb.createFont();ztFont.setItalic(false); // 设置字体为斜体字ztFont.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”ztFont.setFontHeightInPoints((short) 13); // 将字体大小设置为18pxztFont.setFontName("宋体"); // 将“宋体”字体应用到当前单元格上ztFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗style.setFont(ztFont);//设置内容格式HSSFCellStyle dataStyle = wb.createCellStyle();dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式// 声明列对象HSSFCell cell = null;HSSFCell detialCell = null;// 创建标题for (int i = 0; i < title.length; i++) {cell = headRow.createCell(i);cell.setCellValue(title[i]);cell.setCellStyle(style);}for (int i = 0; i < title2.length; i++) {detialCell = detailRow.createCell(i);detialCell.setCellValue(title2[i]);detialCell.setCellStyle(style);}// 创建内容for (int i = 0; i < values.length; i++) {headRow = sheet.createRow(i + 1);for (int j = 0; j < values[i].length; j++) {// 将内容按顺序赋给对应的列对象HSSFCell headCell = headRow.createCell(j);headCell.setCellValue(values[i][j]);headCell.setCellStyle(dataStyle);}}for (int i = 0; i < values2.length; i++) {detailRow = sheet.createRow(i + 3);for (int j = 0; j < values2[i].length; j++) {// 将内容按顺序赋给对应的列对象HSSFCell detCell = detailRow.createCell(j);detCell.setCellValue(values2[i][j]);detCell.setCellStyle(dataStyle);}}return wb;}
}

控制层代码

package com.sto.controller;import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.sto.export.ExcelExportService;
import com.sto.pojo.Order;
import com.sto.pojo.OrderDetial;
@Controller
@RequestMapping(value = "/report")
public class TestController {@Autowiredprivate ExcelExportService excelExportService;/*** 导出报表* @return*/@RequestMapping(value = "/export")@ResponseBodypublic void export(HttpServletRequest request,HttpServletResponse response) throws Exception {//获取数据List<Order> list = new ArrayList<>();Order order = new Order();order.setOrderId(123456L);order.setOrderCode("OC123456");order.setOrderSource("STO");order.setOrderPrice(10D);List<OrderDetial> arrayList = new ArrayList<>();OrderDetial orderDetial = new OrderDetial();orderDetial.setProductId(10001L);orderDetial.setProductCode("IF10001");orderDetial.setProductName("咖啡IE");orderDetial.setProductWeight("150g");orderDetial.setProductDec("测试数据");arrayList.add(orderDetial);OrderDetial orderDetial2 = new OrderDetial();orderDetial2.setProductId(10002L);orderDetial2.setProductCode("IF10002");orderDetial2.setProductName("咖啡IE_2");orderDetial2.setProductWeight("150g");orderDetial2.setProductDec("测试数据02");arrayList.add(orderDetial2);order.setOrderDetails(arrayList);list.add(order);//excel标题String[] title = {"主单","订单ID","订单编码","订单来源","订单价值"};String[] title2 = {"明细","货品ID","货品编码","货品名称","货品重量","货品描述"};//excel文件名String fileName = "订单信息表"+System.currentTimeMillis()+".xls";//sheet名String sheetName = "订单信息表";String[][] content = new String[list.size()][];for (int i = 0; i < list.size(); i++) {content[i] = new String[title.length];Order obj = list.get(i);content[i][0] = "";content[i][1] = obj.getOrderId().toString();content[i][2] = obj.getOrderCode();content[i][3] = obj.getOrderSource();content[i][4] = obj.getOrderPrice().toString();}String[][] content2 = new String[list.get(0).getOrderDetails().size()][];;for (int i = 0; i < list.get(0).getOrderDetails().size(); i++) {content2[i] = new String[title2.length];OrderDetial obj = list.get(0).getOrderDetails().get(i);content2[i][0] = "";content2[i][1] = obj.getProductId().toString();content2[i][2] = obj.getProductCode();content2[i][3] = obj.getProductName();content2[i][4] = obj.getProductWeight();content2[i][5] = obj.getProductDec();}//创建HSSFWorkbook HSSFWorkbook wb = excelExportService.getHSSFWorkbook(sheetName, title, content,title2,content2, null);//响应到客户端try {this.setResponseHeader(response, fileName);OutputStream os = response.getOutputStream();wb.write(os);os.flush();os.close();} catch (Exception e) {e.printStackTrace();}}// 发送响应流方法public void setResponseHeader(HttpServletResponse response, String fileName) {try {try {fileName = new String(fileName.getBytes(), "ISO8859-1");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}response.setContentType("application/octet-stream;charset=ISO8859-1");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");} catch (Exception ex) {ex.printStackTrace();}}
}

实体类Order

package com.sto.pojo;import java.util.List;import lombok.Data;@Data
public class Order {/*** 订单id*/private Long orderId;/*** 订单编码*/private String orderCode;/*** 订单来源*/private String orderSource;/*** 订单价值*/private Double orderPrice;/*** 订单明细*/private List<OrderDetial> orderDetails;
}

实体类OrderDetail

package com.sto.pojo;import lombok.Data;@Data
public class OrderDetial {/*** 商品id*/private Long productId;/*** 商品名称*/private String productName;/*** 商品编码*/private String productCode;/*** 商品描述*/private String productDec;/*** 商品重量*/private String productWeight;
}

导出样式

Java导出主表和明细Excel相关推荐

  1. java导出功能无法下载excel

    java导出功能无法下载excel 开始使用ajax请求,项目不报错,但是浏览器也没有Excel文件下载,查找代码好久都没有解决 原因:Ajax请求只是个"字符型"的请求,即请求的 ...

  2. 用java输出学生信息表代码_使用java导出学生成绩表-excel成绩表

    本文简单研究使用java导出学生成绩表,使用到的导出Excel的技术为Apache poi,相关的技术可以查看我之前的文章.之前导出的Excel的格式为03版的xls,使用的jar为poi-3.10- ...

  3. Java导出带格式的Excel数据到Word表格

    在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用Spi ...

  4. 如何通过Java导出带格式的 Excel 数据到 Word 表格

    在Word中制作报表时,我们经常需要将Excel中的数据复制粘贴到Word中,这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件.但是如果表格比较长,内容就会存在一定程度的丢失,无法 ...

  5. java 导出复杂格式的 Excel 留着自己备用

    效果   看看是不是你要的样子 POM.xml <dependency><groupId>org.apache.poi</groupId><artifactI ...

  6. java导出csv文件使用Excel打开乱码问题

    写一个csv文件,发现使用 notpad++ 打开是没有问题的,但是使用 Excel 打开之后显示乱码 刚开始的代码是这样子的: ByteArrayOutputStream os = new Byte ...

  7. java 导出excel到多个sheet

    java 导出excel 多个sheet 废话不多说了,直接上代码,有需要的盆友,可以看看.@TOC @RequestMapping("/exportAllyScoreCount" ...

  8. java 导出个性 excel 表格

    Java 导出复杂格式 excel java 导出普通格式 excel 新思路创键模板,设置固定样式,替换值 采用模板形式,替换值 代码 衍生导出复杂表头,动态表体excel java 导出普通格式 ...

  9. Java导出无规则excel,如报销单,申请单,结算单等

    普通业务我们导出的excel文件大多是有规则的表记录导出,即表头+表记录.但是如果业务上让我们去导出一些复杂的excel结构,比如导出结算单,申请单这些,如下: 类似这种excel文件格式的导出,现有 ...

最新文章

  1. stl.map使用总结
  2. Exchange 2010通过NAT方式发布到公网
  3. Hello,PyQt5!
  4. 谁才是Transformer家族中的最强王者?谷歌告诉你答案
  5. 成为最大的独立开源公司,对SUSE意味着什么? | 人物志
  6. 信息学奥赛一本通(1030:计算球的体积)
  7. canvas学习之柱状图
  8. github连接出现Bad file number问题
  9. 麦克纳姆轮全向移动机器人自旋转运动分析
  10. 关于忘记SYSKEY密码后清除密码操作
  11. PHP+Swoole实现微信小程序客服即时通信聊天功能
  12. 配置管理计划的新设想
  13. Android Studio简介
  14. 计算机的颜色英语怎么说,颜色的英文是什么怎么说
  15. 一文看懂互联网支付系统整体架构
  16. java查找pdf关键字_java实现查找PDF关键字所在页码及其坐标
  17. 金融类APP上架经验分享
  18. Android 开源优秀项目
  19. 在线 Beosin EOS-IDE 免费版本同时支持智能合约在线编辑、编译、运行调试、部署
  20. 海尔小神童XQB40-F型波轮全自动洗衣机控制系统分析

热门文章

  1. 查看Redis版本信息
  2. fiddler抓取夜神模拟中 微信小程序和app的https数据包
  3. 详解【数据库】关系代数基本运算
  4. 设计分享|单片机交通灯仿真(汇编)
  5. AC自动机(题目+模板)
  6. PPTP服务器的端口
  7. 一道简单的ctf 分析
  8. Qt6官方最新消息:桌面样式Qt quick Controls 2支持大多控件,委托更少,运行更流畅
  9. java 抽奖程序,自定义抽奖概率和奖品,模拟王者荣耀水晶抽奖
  10. python3.5.4爬取豆瓣中国内地电影票房总排行输出到excel