拿来即用的下载Excel模板
模板导出
拿来即用
@PostMapping("/templateExport")
@ApiOperation(value = "模板导出", notes = "作者:yysd")
public ReturnObject exportAuditContent(HttpServletResponse response) throws Exception{
ReturnObject returnObject = new ReturnObject();
OutputStream outputStream = tryCatch2gGetOutput(response);
HSSFWorkbook workbook = new HSSFWorkbook();
//headers
String[] headers=new String[]{"表头1","表头2","表头3","表头4","表头5","表头6","表头7","表头8"};
String sheetTitle = "机电设备信息缺陷";
ExcelForMoreSheet.exportExcel(workbook,sheetTitle,headers,outputStream);
try {
workbook.write(outputStream);
outputStream.close();
returnObject.setRedata("导出成功");
} catch (Exception e) {
returnObject.setRedata("导出失败");
}
return returnObject;
}
private OutputStream tryCatch2gGetOutput(HttpServletResponse response) throws Exception{
try {
OutputStream output = response.getOutputStream();
response.reset();
String filename = "机电设备信息缺陷.xls";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(filename, "UTF-8"))));
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Cache-Control", "no-cache");
return output;
} catch (Exception e) {
throw new Exception("导出出错");
}
}
工具类
public static void exportExcel(HSSFWorkbook workbook,String sheetTitle, String[] headers,OutputStream out) {
/*
* 设置表头的样式
*/
// 生成一个表格
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, sheetTitle);
// 设置表格默认列宽度为20个字节
sheet.setDefaultColumnWidth((short) 20);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
//上下左右边框
style.setBorderBottom(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setColor(IndexedColors.BLACK.index);
font.setFontHeightInPoints((short) 14);
font.setFontName("黑体");
// 把字体应用到当前的样式
style.setFont(font);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index); //背景色
/*
* 设置标题样式
*/
HSSFCellStyle titleStyle = workbook.createCellStyle(); //标题样式
titleStyle.setAlignment(HorizontalAlignment.CENTER);
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
titleStyle.setBorderBottom(BorderStyle.THIN);
titleStyle.setBorderTop(BorderStyle.THIN);
titleStyle.setBorderLeft(BorderStyle.THIN);
titleStyle.setBorderRight(BorderStyle.THIN);
HSSFFont ztFont = workbook.createFont();
ztFont.setItalic(false); // 设置字体为斜体字
ztFont.setColor(IndexedColors.BLACK.index); // 将字体设置为“黑色”
ztFont.setFontHeightInPoints((short)18); // 将字体大小设置为18px
ztFont.setFontName("宋体"); // 将“宋体”字体应用到当前单元格上
ztFont.setBold(true); //加粗
titleStyle.setFont(ztFont);
// 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
HSSFRow row2 = sheet.createRow(0);
row2.setHeightInPoints((short) 35);
// 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell2 = row2.createCell(0);
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.length-1));
// 设置单元格内容
cell2.setCellValue("机电设备缺陷信息表");
cell2.setCellStyle(titleStyle);
// 产生表格标题行
HSSFRow row = sheet.createRow(1);
row.setHeightInPoints(23);//设置行高
sheet.setColumnWidth(0, 20*256);//设置列的宽度
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell((short) i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text.toString());
}
}
//下面代码是导出加上数据
// 遍历集合数据,产生数据行
//list对应的是类型List<List<String>> 此处这个list已经是所有的数据,一行数据是List<String>
if (list != null) {
int index = 2;//从第一几行开始
for (List<String> m : list) {
row = sheet.createRow(index);
int cellIndex = 0;
for (String str : m) {
HSSFCell cell = row.createCell((short) cellIndex);
if (str == null) {
str = "";
}
cell.setCellValue(str.toString());
cellIndex++;
}
index++;
}
}
效果图,此处只是展示模板的,如果要加数据,请看上方代码最后
复杂一些的
public static void exportExcelTemplate(HSSFWorkbook workbook, String sheetTitle, String[] headersFirst, String[] headersSecond, List<String> itemNameList, List<Integer> mergeCoumn) {
/*
* 设置表头的样式
*/
// 生成一个表格
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, sheetTitle);
// 设置表格默认列宽度为20个字节
sheet.setDefaultColumnWidth((short) 20);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 上下左右边框
style.setBorderBottom(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setColor(IndexedColors.BLACK.index);
font.setFontHeightInPoints((short) 12);
font.setFontName("宋体");
// 把字体应用到当前的样式
style.setFont(font);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index); // 背景色
//第一层表头样式
// 生成一个样式
HSSFCellStyle firststyle = workbook.createCellStyle();
// 设置这些样式
firststyle.setAlignment(HorizontalAlignment.CENTER);
firststyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 上下左右边框
firststyle.setBorderBottom(BorderStyle.THIN);
firststyle.setBorderTop(BorderStyle.THIN);
firststyle.setBorderLeft(BorderStyle.THIN);
firststyle.setBorderRight(BorderStyle.THIN);
// 生成一个字体
HSSFFont firstfont = workbook.createFont();
firstfont.setColor(IndexedColors.BLACK.index);
firstfont.setFontHeightInPoints((short) 12);
firstfont.setFontName("宋体");
// 把字体应用到当前的样式
firststyle.setFont(firstfont);
firststyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
firststyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.index); // 背景色
/*
* 设置标题样式
*/
HSSFCellStyle titleStyle = workbook.createCellStyle(); // 标题样式
titleStyle.setAlignment(HorizontalAlignment.CENTER);
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
titleStyle.setBorderBottom(BorderStyle.DOTTED);
titleStyle.setBorderTop(BorderStyle.DOTTED);
titleStyle.setBorderLeft(BorderStyle.DOTTED);
titleStyle.setBorderRight(BorderStyle.DOTTED);
HSSFFont ztFont = workbook.createFont();
ztFont.setItalic(false); // 设置字体为斜体字
ztFont.setColor(IndexedColors.BLACK.index); // 将字体设置为“黑色”
ztFont.setFontHeightInPoints((short) 18); // 将字体大小设置为18px
ztFont.setFontName("宋体"); // 将“宋体”字体应用到当前单元格上
ztFont.setBold(true); // 加粗
titleStyle.setFont(ztFont);
// 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
HSSFRow row2 = sheet.createRow(0);
row2.setHeightInPoints((short) 35);
// 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell2 = row2.createCell(0);
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headersSecond.length - 1));
// 设置单元格内容
cell2.setCellValue("机电设备信息表");
cell2.setCellStyle(titleStyle);
// 产生表格第一行标题行
if (mergeCoumn != null && mergeCoumn.size() > 0){
int column = 0;
for (int i = 0;i<mergeCoumn.size();i++){
if (mergeCoumn.get(i) == 0){
if (i > 0){
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(1, 2, column, column));
column += 1;
}
}else{
if (i > 0 && mergeCoumn.get(i) != 1){
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(1, 1, column, column+mergeCoumn.get(i)-1));
column = column+mergeCoumn.get(i);
}else if (i > 0 && mergeCoumn.get(i) == 1){
column = column+mergeCoumn.get(i);
} else if (i == 0){
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(1, 1, column, mergeCoumn.get(i)-1));
column += mergeCoumn.get(i);
}
}
}
}
HSSFRow row3 = sheet.createRow(1);
row3.setHeightInPoints(20);// 设置行高
for (int i = 0; i < headersFirst.length; i++) {
if (i == 0){
HSSFCell cell3 = row3.createCell((short) 0);
cell3.setCellStyle(firststyle);
HSSFRichTextString text2 = new HSSFRichTextString(headersFirst[0]);
cell3.setCellValue(text2.toString());
}else {
int a = 0;
for (int i1 = 0; i1 < i; i1++) {
if (mergeCoumn.get(i1) == 0){
a=a+1;
}else {
a=mergeCoumn.get(i1)+a;
}
}
HSSFCell cell3 = row3.createCell((short) a);
cell3.setCellStyle(firststyle);
HSSFRichTextString text2 = new HSSFRichTextString(headersFirst[i]);
cell3.setCellValue(text2.toString());
}
}
// 产生表格第二行标题行
HSSFRow row = sheet.createRow(2);
row.setHeightInPoints(20);// 设置行高
sheet.setColumnWidth(0, 20 * 256);// 设置列的宽度
for (int i = 0; i < headersSecond.length; i++) {
HSSFCell cell = row.createCell((short) i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headersSecond[i]);
cell.setCellValue(text.toString());
}
/*
* 设置下拉选
*/
for (int i =0 ;i <headersSecond.length;i++){
String header = headersSecond[i];
String[] toBeStored = itemNameList.toArray(new String[itemNameList.size()]);
setHSSFValidation(sheet, toBeStored, 3,200,2,2);
}
}
效果图
拿来即用的下载Excel模板的更多相关文章
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
- 下载excel模板,导入数据时需要用到
页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...
- vue Excel导入,下载Excel模板,导出Excel
vue Excel导入,下载Excel模板,导出Excel vue Excel导入,下载Excel模板 <template> <div style="display: ...
- java 下载Excel模板
前端: JSP: <div id="insertBtn" class="MyCssBtn leftBtn" onclick="download( ...
- download下载excel模板的代码
<%-- 直接在JSP页面中进行文件下载的代码(改 Servlet 或者 JavaBean 的话自己改吧), 支持中文附件名(做了转内码处理). 事实上只要向 out 输出字节就被认为是附件内容 ...
- java下载Excel模板(工具类)
一次文件下载记录 一次不成熟的文件下载操作记录,希望能对需要的人有所帮助. 1.前端代码 $("#downloadModel").click(function(){ var mod ...
- C# 中从程序中下载Excel模板
方法一: #region 下载模板 /// <summary> /// 下载模板 /// </summary> /// <param name="sender& ...
- poi下载excel模板
/** * 下载模板 * @param tplName * @param returnName * @param response * @param request * @throws Excepti ...
- html下载excel模板
只需要href等于模板存放的路径即可 <a href="../../TempLate/Attitude.xlsx" class="easyui-linkbutton ...
- java实现赋值excel模板,并在新文件中写入数据,并且下载
/** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...
随机推荐
- (vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理?
(vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理? Linux虚拟机无论在VMware还是VirtualBox下面,只要复制拷贝到别的地方,开启网络服务都会出现报错的问题. 这里以CentOS ...
- 手把手教你部署 DeepSeek 本地模型
本文目标:部署 DeepSeek 本地模型,并通过 Ollama 提供 API 支持,Chatbox 提供 UI 界面. 原则:不搞那些高深的玩法,让小白也能理解并真正的上手实践. 1.下载Ollam ...
- 喜讯!天翼云斩获NLP国际顶会比赛两项荣誉
近日,NLP国际顶会ACL(The Association for Computational Linguistics)进行的国际赛事WASSA 2023(13th Workshop on Compu ...
- FOFA 图标哈希值大全
FOFA 图标哈希值大全 服务 图标 哈希值 默认端口 Atlassian Crowd icon_hash="-1231308448" 8095 CouchDB icon_hash ...
- shell 变量的运算、保存硬件信息脚本
变量的数学运算 方法一:expr ##加减乘除 [root@localhost ~]# num1=10[root@localhost ~]# num2=16[root@localhost ~]# ex ...
- HTML - 1、基础
<!DOCTYPE html> <!-- 指定网页内容的语言 --> <html lang="en"> <head> <!-- ...
- 牛客题解 | 单组_spj判断数组之和
题目 题目链接 解题思路 后台有spj代码,能对同学们的输出数据进行校验,符合条件即可通过. 附赠 spj 代码 #include <iostream> #include <fstr ...
- 发那科FANUC机器人M-710iC减速机维修看这几步
发那科作为全球知名的工业机器人制造商,其M-710iC型号机器人在工业界享有盛誉.然而,即便是最顶尖的设备也难免会遇到维修问题,其中四轴传动齿轮箱的维修尤为关键.本文将深入探讨发那科FANUC机器人 ...
- java推送企业微信消息
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...
- 【最佳方案】RAG 技术深度剖析及 MaxKB 在企业 AI 落地中的应用策略
RAG 已经成为 LLM 大语言模型在企业落地的最佳方案,其中主要是因为 RAG 能够解决幻觉问题.时效性问题以及数据安全问题. 解决幻觉问题: LLM 文本生成的底层原理是基于概率的 token b ...