Excel表格导出

1.后端

    /*** 导出一对一线下课签到表* @param response* @param selectedArriveTime* @param selectedClassRoom*/@RequestMapping(value = "/exportExcel", method = {RequestMethod.GET})public void exportExcel(HttpServletResponse response, String selectedArriveTime, Integer selectedClassRoom) {//查询当天有一对一线下课同学信息List<TDArrangingReservation> studentInfo = reservationService.getStudentInfo(selectedArriveTime, selectedClassRoom);//创建excel表格if (studentInfo != null && studentInfo.size()  > 0) {//创建HSSFWorkbook对象(excel的文档对象)HSSFWorkbook wb = new HSSFWorkbook();//建立新的sheet对象(excel的表单)HSSFSheet sheet0 = wb.createSheet("sheet0");//创建单元格样式CellStyle centerStyle = wb.createCellStyle();//设置单元格内容的水平对齐方式centerStyle.setAlignment(HorizontalAlignment.CENTER);//设置单元格内容的垂直对齐方式centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);//创建标题行HSSFRow titleRow = sheet0.createRow(0);//设置标题行高titleRow.setHeight((short) 500);//设置标题行String[] titles = {"序号", "学生姓名", "上课时间", "上课教室", "督导/指导教师", "任课老师", "上课科目", "本人签字", "到校时间", "离校时间"};//设置列宽int[] columnWidths = {1500, 3000, 4000, 3000, 4000, 3000, 4000, 3000, 3000, 3000};//设置标题行值和样式for (int i = 0; i < titles.length; i++) {sheet0.setColumnWidth(i, columnWidths[i]);HSSFCell cell = titleRow.createCell(i);cell.setCellValue(titles[i]);cell.setCellStyle(centerStyle);}int rowIndex = 1;String lastStudentName = "";//设置开始合并的行号int mergeStartRow = 1;//循环赋值for (int i = 0; i < studentInfo.size(); i++) {TDArrangingReservation reservation = studentInfo.get(i);//创建数据行HSSFRow row = sheet0.createRow(rowIndex);//设置数据行高row.setHeight((short) 400);//学生姓名String currentStudentName = reservation.getStuNickName() != null ? reservation.getStuNickName() : "";//如果当前学生姓名与上一个不同,且不是第一个学生,则需要合并单元格(合并的是之前一样的数据)。if (!currentStudentName.equals(lastStudentName) && i > 0) {//合并指定列的单元格//学生姓名mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 1, centerStyle);//上课教室mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 3, centerStyle);//督导/指导教师mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 4, centerStyle);//本人签字mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 7, centerStyle);//到校时间mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 8, centerStyle);//离校时间mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 9, centerStyle);mergeStartRow = rowIndex;}//创建单元格,设置值和样式。//序号setCellValueAndStyle(row.createCell(0), String.valueOf(rowIndex), centerStyle);//学生姓名setCellValueAndStyle(row.createCell(1), currentStudentName, centerStyle);//上课时间setCellValueAndStyle(row.createCell(2), reservation.getPreTimeFragment(), centerStyle);//上课教室setCellValueAndStyle(row.createCell(3), reservation.getClassRoom(), centerStyle);//督导/指导教师setCellValueAndStyle(row.createCell(4), reservation.getCounselorName(), centerStyle);//任课老师setCellValueAndStyle(row.createCell(5), reservation.getTeacherName(), centerStyle);//上课科目setCellValueAndStyle(row.createCell(6), reservation.getSubName(), centerStyle);//本人签字setCellValueAndStyle(row.createCell(7), "", centerStyle);//到校时间setCellValueAndStyle(row.createCell(8), "", centerStyle);//离校时间setCellValueAndStyle(row.createCell(9), "", centerStyle);lastStudentName = currentStudentName;rowIndex++;}// 处理最后一组相同学生姓名的合并mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 1, centerStyle);mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 3, centerStyle);mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 4, centerStyle);mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 7, centerStyle);mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 8, centerStyle);mergeCellsIfNeeded(sheet0, mergeStartRow, rowIndex - 1, 9, centerStyle);//输出文件try {OutputStream output = response.getOutputStream();String filename = "一对一线下课签到表";String encodedFilename = URLEncoder.encode(filename, "UTF-8");response.reset();response.setHeader("Content-disposition", "attachment; filename=" + encodedFilename + ".xls");response.setContentType("application/msexcel");wb.write(output);output.close();} catch (Exception e) {e.printStackTrace();}}}/*** 合并单元格* @param sheet* @param firstRow* @param lastRow* @param col* @param style*/private void mergeCellsIfNeeded(HSSFSheet sheet, int firstRow, int lastRow, int col, CellStyle style) {if (firstRow < lastRow) {CellRangeAddress region = new CellRangeAddress(firstRow, lastRow, col, col);sheet.addMergedRegion(region);for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {HSSFRow row = sheet.getRow(i);if (row == null) {row = sheet.createRow(i);}HSSFCell cell = row.getCell(col);if (cell == null) {cell = row.createCell(col);}cell.setCellStyle(style);}}}/*** 设置单元格值和样式* @param cell* @param value* @param style*/private void setCellValueAndStyle(HSSFCell cell, String value, CellStyle style) {cell.setCellValue(value != null ? value : "");cell.setCellStyle(style);}

2.前端

//导出签到表数据function exportData() {//签到时间var selectedArriveTime = $("#time1").val();//上课地点var classRoom = document.getElementsByName('information');var selectedClassRoom = '';for (var i = 0; i < classRoom.length; i++) {if (classRoom[i].checked) {selectedClassRoom = classRoom[i].value;break;}}window.location.href = '${currentBaseUrl}/exportExcel?' + 'selectedArriveTime='+selectedArriveTime+'&selectedClassRoom='+selectedClassRoom;setTimeout(function() {$("#exportTipsInfoModule").hide();}, 3000);}

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

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

相关文章

【网络安全的神秘世界】Error:Archives directory /var/cache/apt/archives/partial is missing.

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨问题描述 在kali中想要安装beef-xss软件包时&#xff0c;发生如下报错&#xff1a; Error: Archives directory /var/cac…

我在高职教STM32——串口通信(3)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

编织文字之美:WebKit的CSS文本格式化能力全解析

编织文字之美&#xff1a;WebKit的CSS文本格式化能力全解析 在网页设计中&#xff0c;文本不仅是传递信息的媒介&#xff0c;更是展现美学的重要元素。WebKit&#xff0c;作为Safari、QQ浏览器等众多浏览器的内核&#xff0c;提供了强大的CSS文本格式化支持。通过CSS&#xff…

Kubernetes Service 之 LoadBalancer

Kubernetes 之 LoadBalancer 定义 负载均衡器 (LoadBalancer) 是 Kubernetes 中用来对外暴露 Service 服务的&#xff0c;它可以将服务集中到一个公共 IP 上。我们常用 MetalLB 作为自建均衡器。 使用 安装 MetalLB kubectl apply -f https://raw.githubusercontent.com/m…

pandas库方法汇总介绍

目录 1. assign() 新增一列 1. assign() 新增一列 >>> df pd.DataFrame({temp_c: [17.0, 25.0]}, ... index[Portland, Berkeley]) >>> dftemp_c Portland 17.0 Berkeley 25.0Where the value is a callable, evaluated on df: &…

vue slot:为什么 $slots 无值而 $scopedSlots 有值?

在 Vue.js 中&#xff0c;$slots 和 $scopedSlots 是组件实例上用于访问插槽内容的两个属性&#xff0c;但它们各自有不同的用途和表现方式&#xff0c;特别是在处理作用域插槽&#xff08;scoped slots&#xff09;时。 $slots $slots 是一个包含所有插槽内容的对象。对于普…

使用Python爬虫下载视频源码

一、引言(●ˇ∀ˇ●) 在当今互联网时代&#xff0c;视频内容已成为人们获取信息和娱乐的重要方式。有时&#xff0c;我们可能希望将这些视频下载到本地&#xff0c;以便在没有网络的情况下观看。本文将介绍如何使用Python编写一个简单的爬虫。 二、环境准备&#x1f618; 在…

Nginx部署前端项目尝试 - windows版

前端还是要学一点服务器端的东西&#xff0c;才能更好的理解一些知识 1、项目打包 生成dist 2、下载nginx解压&#xff0c;start nginx 启动 浏览器输入 localhost 显示如下页面表示启动成功 3、配置nginx server {listen 8080;# ip 不要加http 前后不要加 /server_name…

结合金融场景的Scipy模块编程

结合金融场景的Scipy模块编程 数据链接&#xff1a;https://pan.baidu.com/s/1VMh8-4IeCUYXB9p3rL45qw 提取码&#xff1a;c6ys import numpy as np import pandas as pd import statsmodels import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-se…

蓝牙耳机推荐哪个品牌?四款必入热门蓝牙耳机品牌推荐

面对市场上琳琅满目的蓝牙耳机品牌和型号&#xff0c;选择一款合适的蓝牙耳机可能会令人感到困惑&#xff0c;蓝牙耳机推荐哪个品牌&#xff1f;为了帮助大家做出明智的决策&#xff0c;我将带来四款必入热门蓝牙耳机品牌推荐&#xff0c;均是我自用还不错的&#xff0c;大家可…

VisualRules-Web案例展示(一)

VisualRules单机版以其卓越的功能深受用户喜爱。现在&#xff0c;我们进一步推出了VisualRules-Web在线版本&#xff0c;让您无需安装任何软件&#xff0c;即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策&#xff0c;VisualRules-W…

【JavaScript 算法】堆排序:优先队列的实现

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理堆的定义堆排序的步骤 二、算法实现构建最大堆注释说明&#xff1a; 三、应用场景四、总结 堆排序&#xff08;Heap Sort&#xff09;是一种基于堆数据结构的排序算法&#xff0c;具有较好的时间复杂度表现。堆…

JDBC常见用法

JDBC中主要的类及常用方法 Class类 Class类全称java.lang.Class&#xff0c;Java程序运行时会自动创建程序中的每个类的Class对象&#xff0c;通过Class类的方法&#xff0c;可以得到程序中每个类的信息。Class类方法主要包括&#xff1a; public static Class forName(S…

Electron案例解析——切换主题颜色的案例

效果图 核心 Electron的 nativeTheme.themeSource属性&#xff0c;值是string。有三个参数&#xff1a;system, light 和 dark&#xff0c;用来覆盖、重写Chromium内部的相应的值 Election的api描述值nativeTheme.themeSource被用来覆盖、重写Chromium内部的相应的值system, …

邮件安全篇:邮件传输加密(SSL/TLS or STATRTTLS)

1. 前言 使用过邮件客户端的同学一定见过下面这张图。这是客户端账号配置界面&#xff0c;里面有SSL、STARTTLS选项。刚接触邮件客户端的同学肯定会有这些疑问&#xff1a;什么是SSL&#xff1f;什么是STARTTLS&#xff1f;两者有什么区别&#xff1f;具体该如何选择呢&#x…

Stable Diffusion 使用详解(2)---- 图生图原理,操作,参数

目录 背景 图生图原理 基本原理 1. 扩散模型基础 2. 图生图的具体流程 3. 关键技术点 4. 应用实例 CLIP 原理 1.基本概念 2. 核心特点 使用及参数 随机种子 重绘幅度 图像宽高 采样方法 1. DPM&#xff08;扩散概率模型&#xff09; 2. SDE&#xff08;随机微…

能源化工5G防爆终端能给行业带来什么重要作用?

在能源化工领域&#xff0c;5G防爆终端的引入无疑为行业带来了革命性的变革与重要作用。这些集成了先进5G通信技术和防爆设计的高端设备&#xff0c;不仅提升了生产作业的安全性&#xff0c;还极大地增强了运营效率与智能化水平。 高速、低延迟的5G网络为防爆终端提供了前所未有…

机器人控制:物理人机交互控制中的不稳定性因素及其解决思路

机器人控制&#xff1a;物理人机交互控制中的不稳定性因素及其解决思路 物理人机交互控制中的不稳定性是指在机器人或相关物理系统与人类进行交互时&#xff0c;系统行为表现出的一种非预期、不可控或难以预测的动态特性。这种不稳定性可能源于多个方面&#xff0c;包括但不限于…

SPA Fiori开发实战课程(一)

前言 由于工作需要&#xff0c;对Fiori的开发有了一些具体实践&#xff0c;所以做一些记录和总结。 准备工作 1. 对前端有一定的了解&#xff0c;熟悉Node.js&#xff0c;Vue等前端服务器和基础框架。 2. 后端使用ABAP系统。 3. 使用Visual Studio Code进行开发。 工程搭建 打…

基于springboot+vue+uniapp的开放实验室预约管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…