public class User {
private String id;
private String name;
private String year;
}
public class ExportEntity<T> implements Serializable {
Map<String,List<T>> map = new HashMap();
public Map<String, List<T>> getMap() {
return map;
}
public void setMap(Map<String, List<T>> map) {
this.map = map;
}
}
@Controller
public class UserController {
@Autowired
UserService userService;
@ResponseBody
@RequestMapping("/export")
public void export(HttpServletResponse response){
userService.exportData(response);
}
}
public interface UserService {
void exportData(HttpServletResponse response);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void exportData(HttpServletResponse response){
Map<String, List<User>> map = new HashMap();
for (int j = 2019; j < 2022 ; j++) {
String sql = "select * from user where year = '"+j+"'";
List<User> listData = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
map.put(String.valueOf(j),listData);
}
ExportEntity<User> export = new ExportEntity();
export.setMap(map);
try {
String fileName = "export.xls";
String[] title = {"主键","名称","年份"};
String[] mergeCell = {"ID","name","year"};
Integer cellNum = title.length - 1;
HSSFWorkbook wbMulit = ExportUtil.getHSSFWorkbookMulit(title, export, null, mergeCell, cellNum);
this.setResponseHeader(response, fileName);
OutputStream os = response.getOutputStream();
wbMulit.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) {
e.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();
}
}
}
import com.qxj.export.entity.ExportEntity;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ExportUtil {
public static HSSFWorkbook getHSSFWorkbookMulit(String[] title, ExportEntity<?> map, HSSFWorkbook wb, String[] mergeCell, Integer cellNum ){
if(wb == null){
wb = new HSSFWorkbook();
}
String[][] content = new String[0][];
HSSFSheet sheet = null;
Map<String, ? extends List<?>> mapData = map.getMap();
List exportEntities = new ArrayList();
for (int k = 2019; k < 2022; k++) {
for (int i = k; i < k + 1; i++) {
if (i < 2022) {
for (int j = 0; j < mapData.get(String.valueOf(i)).size(); j++) {
exportEntities.add(mapData.get(String.valueOf(i)).get(j));
}
}
}
if(exportEntities.size()!=0) {
content = new String[exportEntities.size()][title.length];
for (int j = 0; j < exportEntities.size(); j++) {
Object export = exportEntities.get(j);
Class exportClass = export.getClass();
Field[] declaredFields = exportClass.getDeclaredFields();
for (int i = 0; i < declaredFields.length; i++) {
Field field = declaredFields[i];
field.setAccessible(true);
String name = field.getName();
String value = null;
try {
value = (String) field.get(export);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
content[j][i] = value;
}
}
sheet = wb.createSheet(String.valueOf(k));
for (int i = 0; i < title.length; i++) {
sheet.setColumnWidth(i, 30 * 256);
}
style(sheet,wb,mergeCell,title,content);
exportEntities.clear();
}
}
return wb;
}
public static HSSFWorkbook getHSSFWorkbookSingle(String[] title, ExportEntity<?> map, HSSFWorkbook wb, String[] mergeCell, Integer cellNum ){
if(wb == null){
wb = new HSSFWorkbook();
}
String[][] content = new String[0][];
HSSFSheet sheet = null;
sheet = wb.createSheet("sheetName");
for (int i = 0; i < title.length; i++) {
sheet.setColumnWidth(i, 30 * 256);
}
Map<String, ? extends List<?>> mapData = map.getMap();
List exportEntities = new ArrayList();
for (int k = 2019; k < 2022; k++) {
for (int i = 0; i < mapData.get(String.valueOf(k)).size(); i++) {
exportEntities.add(mapData.get(String.valueOf(k)).get(i));
}
}
if(exportEntities.size()!=0) {
content = new String[exportEntities.size()][title.length];
for (int j = 0; j < exportEntities.size(); j++) {
Object export = exportEntities.get(j);
Class exportClass = export.getClass();
Field[] declaredFields = exportClass.getDeclaredFields();
for (int i = 0; i < declaredFields.length; i++) {
Field field = declaredFields[i];
field.setAccessible(true);
String name = field.getName();
String value = null;
try {
value = (String) field.get(export);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
content[j][i] = value;
}
}
style(sheet,wb,mergeCell,title,content);
exportEntities.clear();
}
return wb;
}
private static void style(HSSFSheet sheet, HSSFWorkbook wb, String[] mergeCell, String[] title, String[][] content){
HSSFRow row = sheet.createRow(0);
row.setHeightInPoints(30);
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setBorderRight(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
Font font = wb.createFont();
font.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);
style.setFont(font);
HSSFCellStyle styleData = wb.createCellStyle();
styleData.setWrapText(true);
styleData.setAlignment(HorizontalAlignment.CENTER);
styleData.setVerticalAlignment(VerticalAlignment.CENTER);
styleData.setBorderBottom(BorderStyle.THIN);
styleData.setBorderLeft(BorderStyle.THIN);
styleData.setBorderRight(BorderStyle.THIN);
styleData.setBorderTop(BorderStyle.THIN);
HSSFCell cell = null;
for (int i = 0; i < mergeCell.length; i++) {
cell = row.createCell(i);
cell.setCellValue(mergeCell[i]);
cell.setCellStyle(style);
}
HSSFRow rowTitle = sheet.createRow(1);
for (int i = 0; i < title.length; i++) {
cell = rowTitle.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
for (int i = 0; i < content.length; i++) {
row = sheet.createRow(i + 2);
for (int j = 0; j < content[i].length; j++) {
cell = row.createCell(j);
cell.setCellValue(content[i][j]);
cell.setCellStyle(styleData);
}
}
}
}
//配置文件
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/数据库名称
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database=mysql
spring.jpa.show-sql=true
server.port=8088
//依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4.0-atlassian-hosted</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
//表结构
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`year` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS = 1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)