Java 下载excel文件

一、背景

微信小程序需要导出excel文件,后端技术Java,前端使用uniapp框架,使用excel模板。

二、excel 报表模板

需要补充的内容是以下标记问号的,其中有个表格,内容是动态添加的

三、Java端代码实现

关键步骤,省略数据查询

//……
//上面是操作数据库的内容,就不写了
String classPath = "xxx/xxxx.xls";//excel模板位置,我是放在与com同级的目录下了
ClassPathResource classPathResource = new ClassPathResource(classPath);
InputStream is = classPathResource.getInputStream();
//1. 创建一个 workbook 对象
HSSFWorkbook workbook = new HSSFWorkbook(is);
HSSFSheet sheetAt = workbook.getSheetAt(0);//获取第一个sheet
//因为是模板,且这几行内容固定,所以这个地方可以写死
sheetAt.getRow(2).getCell(1).setCellValue(sqmc);//给第三行第二个单元格添加内容
sheetAt.getRow(2).getCell(4).setCellValue(format_sbny);//给第三行第五个单元格添加内容
int initRow = 4;//动态行添加是从第五行开始的,所以设置为4,因为首行是0
if (ds_list.size() != 0) {//这是数据库查询到的表格内容,ds_list是一个对象数组//从第5行开始往下移动 ds_list.size()行,在第initRow + ds_list.size()结束,true:表示是否更新单元格的公式。false:表示是否复制行高。sheetAt.shiftRows(initRow, initRow + ds_list.size(), ds_list.size(), true, false);for (int i = 0; i < ds_list.rowCount(); i++) {JSONObject obj = ds_list.getRow(i);//这里的这个getRow()方法是我们项目自己封装的,不要使用,实质就是获取对象数组中的对象HSSFRow row = sheetAt.createRow(initRow);row.setHeightInPoints(30);//设置行高30磅 HSSFCellStyle cellStyle = workbook.createCellStyle();//创建单元格样式cellStyle.setAlignment(HorizontalAlignment.CENTER);// 设置水平居中显示cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 设置垂直居中显示// 设置边框样式cellStyle.setBorderTop(BorderStyle.THIN);cellStyle.setBorderBottom(BorderStyle.THIN);cellStyle.setBorderLeft(BorderStyle.THIN);cellStyle.setBorderRight(BorderStyle.THIN);HSSFFont cellFont = workbook.createFont();    // 创建字体cellFont.setFontHeightInPoints((short)12);    // 将字体大小cellFont.setFontName("宋体");             // 设置字体为 宋体 应用到当前单元格上cellStyle.setFont(cellFont); // 字体应用到 标题样式上for (int j = 0; j < 5; j++) {row.createCell(j);HSSFCell cell = row.getCell(j);cell.setCellStyle(cellStyle);}//接下来就是赋值row.getCell(0).setCellValue(i + 1);row.getCell(1).setCellValue(obj.getString("xm", ""));row.getCell(2).setCellValue(obj.getString("sfzhm", ""));row.getCell(3).setCellValue(obj.getString("swsj", ""));row.getCell(4).setCellValue(obj.getString("bz", ""));initRow++;}
}
//给其他位置赋值
sheetAt.getRow(initRow).getCell(1).setCellValue(qtsm);//其他说明
sheetAt.getRow(initRow + 1).getCell(1).setCellValue(tbr_xm);//
sheetAt.getRow(initRow + 1).getCell(4).setCellValue(tbrq);//填表日期
sheetAt.getRow(initRow + 2).getCell(1).setCellValue(jbr);//经办人
sheetAt.getRow(initRow + 2).getCell(4).setCellValue(sbrq);//收表日期String fileName = "xxxxxx.xls";//设置文件名
// 设置响应内容类型为Excel文件
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
// 设置响应头,告诉浏览器以附件形式下载文件,并指定文件名
response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(fileName,"UTF-8"));
OutputStream output = response.getOutputStream();//HttpServletResponse response
try {workbook.write(output);output.flush();
} catch (IOException e) {e.printStackTrace();
} finally {if (output != null) {output.close();}
}

通过上述的操作,然后就可以实现下载了。

四、其他

如果是小程序,那么可以复制下载链接,然后在手机浏览器打开,即可实现下载功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的视频智能处理软件&#xff0c;它利用先进的机器学习和人工智能技术&#xff0c;为视频创作者提供了前所未有的视频增强和修复功能。无论您是专业视频编辑师、摄影师&#xff0c;还是热爱视频创作的爱好者&#xff0c;Topaz Video AI都能帮助您轻松…

webpack打包效率优化,webpack打包体积优化

优化 webpack 打包效率的方法 使用增量构建和热更新&#xff1a;在开发环境下&#xff0c;使用增量构建和热更新功能&#xff0c;只重新构建修改过的模块&#xff0c;减少整体构建时间。避免无意义的工作&#xff1a;在开发环境中&#xff0c;避免执行无意义的工作&#xff0c…

2403C++,C++20协程库

原文 基于C20协程的http库--cinatra cinatra是基于C20无栈协程实现的跨平台,仅头,高性能,易用的http/https库(http1.1),包括httpserver和httpclient,功能完备,不仅支持最普通的getpost等请求,还支持restfulapi,websocket,chunked,ranges,multipart,静态文件服务和反向代理等功…

Python程序的流程

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 年轻是我们唯一拥有权利去编制梦想的时…

【前端素材】推荐优质后台管理系统Annex平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的管理界面&#xff0c;通常由管理员和工作人员使用。它提供了访问和控制网站或应用程序后台功能的工具和界面&#xff0c;使其能够管理用户、内容、数据和其他各种功能。 2、功能需求 后台管理系…

利用python爬取本站的所有博客链接

目录 前因 首先的尝试 解决办法 导入包 定义一个json配置文件 打开浏览器执行操作 注意 提取源代码并且进行筛选链接 执行结果 前因 由于自己要把csdn的博客同步到hugo中&#xff0c;把博客转为md格式已经搞好了&#xff0c;但是由于csdn的图片具有防盗链&#xff0c;…

vue实现商品评分效果(通过插件实现)

Vue.js 实现了一个简单的商品评分功能。用户可以通过点击星星来修改商品的评分&#xff0c;并且评分显示了相应的星星数。 废话不多说&#xff0c;直接上代码 方法一&#xff1a; <template><div><avue-form :model"formData"><avue-form-it…

2024年经典【自动化面试题】附答案

一、请描述一下自动化测试流程&#xff1f; 自动化测试流程一般可以分为以下七步&#xff1a; 编写自动化测试计划&#xff1b; 设计自动化测试用例&#xff1b; 编写自动化测试框架和脚本&#xff1b; 调试并维护脚本&#xff1b; 无人值守测试&#xff1b; 后期脚本维…

【数据结构】深入探讨二叉树的遍历和分治思想(一)

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;数据结构 &#x1f525;该文章主要讲述二叉树的递归结构及分治算法的思想。 目录&#xff1a; &#x1f30d;前言&#xff1a;&#x1f30d;…

Sora 原理与技术实战笔记一

b 站视频合集 【AIX组队学习】Sora原理与技术实战&#xff1a;Sora技术路径详解 Sora 技术报告&#xff08;OpenAI&#xff09; huggingsd 文生图视频系列的一个开源项目 最强视频生成模型Sora相关技术解析 https://github.com/lichao-sun/SoraReview 惊艳效果&#xff1a; 长…

【Linux】screen

文章目录 一、screen二、功能三、使用3.1 安装3.2 常用参数3.3 状态3.4 使用3.4.1 终端列表3.4.2 新建screen3.4.3 detached3.4.4 回到终端3.4.5 清除终端 一、screen screen为多视窗管理程序。在服务器上搭建一些服务的时候&#xff0c;经常要用到screen命令。例如某些服务开…

云呐智能运维包含哪些内容?运维未来的发展方向是什么?

智能运维&#xff08;AIOps&#xff09;是一种使用人工智能应用程序来调节IT操作和维护的实践方式。它结合了大数据和机器学习技术&#xff0c;旨在自动化和改进IT操作和维护任务&#xff0c;如故障检测、因果分析和自动故障修复。以下是智能操作和维护的具体内容、挑战和解决方…

使用Node.js构建一个简单的聊天机器人

当谈到人工智能&#xff0c;我们往往会想到什么&#xff1f;是智能语音助手、自动回复机器人等。在前端开发领域中&#xff0c;我们也可以利用Node.js来构建一个简单而有趣的聊天机器人。本文将带你一步步实现一个基于Node.js的聊天机器人&#xff0c;并了解其工作原理。 首先…

文生图项目总结

文生图 功能点 页面进来获取背景图url和图片宽高&#xff08;根据比例和手机屏幕处理过的宽高&#xff09;渲染图片&#xff08;背景图最后生成图片模糊&#xff0c;换成img展示解决&#xff09;添加多个文字&#xff0c;编辑文字内容&#xff0c;拖拽改变文字位置&#xff0c…

上云还是下云,最大挑战是什么?| 对话章文嵩、毕玄、王小瑞

近半年来&#xff0c;公有云领域频频发生阿里云、滴滴等平台崩溃事件&#xff0c;与此同时&#xff0c;马斯克的“X 下云省钱”言论引起了广泛关注&#xff0c;一时间&#xff0c;“上云”和“下云”成为热议话题。在最近举办的 AutoMQ 云原生创新论坛上&#xff0c;AutoMQ 联合…

大数据可视化python01

import pandas as pd import matplotlib.pyplot as plt# 设置中文改写字体 plt.rcParams[font.sans-serif] [SimHei]# 读取数据 data pd.read_csv(C:/Users/wzf/Desktop/读取数据进行数据可视化练习/实训作业练习/瓜果类单位面积产量.csv ,encoding utf-8)#输出 print(data)…

springcloud alibaba组件简介

一、Nacos 服务注册中心/统一配置中心 1、介绍 Nacos是一个配置中心&#xff0c;也是一个服务注册与发现中心。 1.1、配置中心的好处&#xff1a; &#xff08;1&#xff09;配置数据脱敏 &#xff08;2&#xff09;防止出错&#xff0c;方便管理 &#xff08;3&#xff…

一本通 1403:素数对

在判断素数对的两个数是否都为素数时可以只判断数的一半 #include<bits/stdc.h> using namespace std; bool su(int a,int b){ for(int i2;i<sqrt(a);i){ if(a%i0){ return 0; } } for(int i2;i<sqrt(b);i){ if(…

AI大预言模型——ChatGPT在地学、GIS、气象、农业、生态、环境等应用

原文链接&#xff1a;AI大预言模型——ChatGPT在地学、GIS、气象、农业、生态、环境等应用 一开启大模型 1 开启大模型 1)大模型的发展历程与最新功能 2)大模型的强大功能与应用场景 3)国内外经典大模型&#xff08;ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Di…

Java底层自学大纲_中间件原理篇

中间件原理专题_自学大纲所属类别学习主题建议课时&#xff08;h&#xff09; A Web服务器Tomcat8原理分析001 Tomcat8底层架构模式2.5 A Web服务器Tomcat8原理分析002 Tomcat8底层源码深度分析2.5 A Web服务器Tomcat8原理分析003 站在微服务架构角度优化Tomcat82.5 B 分布…