模板导出

拿来即用

	@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模板的更多相关文章

  1. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  2. 下载excel模板,导入数据时需要用到

    页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...

  3. vue Excel导入,下载Excel模板,导出Excel

    vue  Excel导入,下载Excel模板,导出Excel vue  Excel导入,下载Excel模板 <template> <div style="display: ...

  4. java 下载Excel模板

    前端: JSP: <div id="insertBtn" class="MyCssBtn leftBtn" onclick="download( ...

  5. download下载excel模板的代码

    <%-- 直接在JSP页面中进行文件下载的代码(改 Servlet 或者 JavaBean 的话自己改吧), 支持中文附件名(做了转内码处理). 事实上只要向 out 输出字节就被认为是附件内容 ...

  6. java下载Excel模板(工具类)

    一次文件下载记录 一次不成熟的文件下载操作记录,希望能对需要的人有所帮助. 1.前端代码 $("#downloadModel").click(function(){ var mod ...

  7. C# 中从程序中下载Excel模板

    方法一: #region 下载模板 /// <summary> /// 下载模板 /// </summary> /// <param name="sender& ...

  8. poi下载excel模板

    /** * 下载模板 * @param tplName * @param returnName * @param response * @param request * @throws Excepti ...

  9. html下载excel模板

    只需要href等于模板存放的路径即可 <a href="../../TempLate/Attitude.xlsx" class="easyui-linkbutton ...

  10. java实现赋值excel模板,并在新文件中写入数据,并且下载

    /** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...

随机推荐

  1. (vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理?

    (vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理? Linux虚拟机无论在VMware还是VirtualBox下面,只要复制拷贝到别的地方,开启网络服务都会出现报错的问题. 这里以CentOS ...

  2. 手把手教你部署 DeepSeek 本地模型

    本文目标:部署 DeepSeek 本地模型,并通过 Ollama 提供 API 支持,Chatbox 提供 UI 界面. 原则:不搞那些高深的玩法,让小白也能理解并真正的上手实践. 1.下载Ollam ...

  3. 喜讯!天翼云斩获NLP国际顶会比赛两项荣誉

    近日,NLP国际顶会ACL(The Association for Computational Linguistics)进行的国际赛事WASSA 2023(13th Workshop on Compu ...

  4. FOFA 图标哈希值大全

    FOFA 图标哈希值大全 服务 图标 哈希值 默认端口 Atlassian Crowd icon_hash="-1231308448" 8095 CouchDB icon_hash ...

  5. shell 变量的运算、保存硬件信息脚本

    变量的数学运算 方法一:expr ##加减乘除 [root@localhost ~]# num1=10[root@localhost ~]# num2=16[root@localhost ~]# ex ...

  6. HTML - 1、基础

    <!DOCTYPE html> <!-- 指定网页内容的语言 --> <html lang="en"> <head> <!-- ...

  7. 牛客题解 | 单组_spj判断数组之和

    题目 题目链接 解题思路 后台有spj代码,能对同学们的输出数据进行校验,符合条件即可通过. 附赠 spj 代码 #include <iostream> #include <fstr ...

  8. 发那科FANUC机器人M-710iC减速机维修看这几步

     发那科作为全球知名的工业机器人制造商,其M-710iC型号机器人在工业界享有盛誉.然而,即便是最顶尖的设备也难免会遇到维修问题,其中四轴传动齿轮箱的维修尤为关键.本文将深入探讨发那科FANUC机器人 ...

  9. java推送企业微信消息

    <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...

  10. 【最佳方案】RAG 技术深度剖析及 MaxKB 在企业 AI 落地中的应用策略

    RAG 已经成为 LLM 大语言模型在企业落地的最佳方案,其中主要是因为 RAG 能够解决幻觉问题.时效性问题以及数据安全问题. 解决幻觉问题: LLM 文本生成的底层原理是基于概率的 token b ...