导入Excel---post提交通用版

前端界面

 通过点击导入弹出一个文本框下载导入的模板

 直接进入代码实现环节:

前端部分添加导入按钮:

<a href="javascript:;" class="btn btn-primary radius professional_btn">导入</a>

导入的文本框

//导入
$(".professional_btn").click(function(){var url = "${base}/a/team/importes";//<----写接口的地方layer_show_closebut("导入题目",url,null,400,function(){var param =WT.wt_serializeJSONObject("searchForm");$("#wt_table_list").wtTable({postData:param});});
})

上面图二的页面代码

<!DOCTYPE html>
<html lang="zh-cn">
<head><meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" /><#include "/a/commons/top.ftl" /><title></title><style type="text/css">.row {box-sizing: border-box;margin-right: 90px;}</style>
</head>
<body>
<article class="page-container"><div class="div1"><div class="row cl"><label class="form-label col-xs-4 col-sm-3" style="text-align: right;margin-top: 5px;"><span class="c-red">*</span>文件:</label><div class="formControls col-xs-8 col-sm-9"><input type="file" class="input-text" value="" id="file" name="file"></div></div><div class="layer-footer" style="position: fixed; bottom: 0;background-color:#fff;width:100%;height:55px;margin-left:-21px;line-height: 43px;border-top: 1px solid #ddd;" ><input class="btn btn-primary radius " id="admin-user-save" type="button" value="&nbsp;&nbsp;确定&nbsp;&nbsp;" style="float: right;margin-right: 20px;margin-top: 10px;"><input class="btn btn-primary radius " id="admin-user-don" type="button" value="&nbsp;&nbsp;下载模板&nbsp;&nbsp;" style="float: right;margin-right: 10px;margin-top: 10px;"><input class="btn btn-default radius " id="admin-user-colse" type="button" value="&nbsp;&nbsp;取消&nbsp;&nbsp;" style="float: right;margin-right: 10px;margin-top: 10px;"></div></div>
</article>
<#include "/a/commons/bottom.ftl" />
<script type="text/javascript">$(function() {$("#admin-user-save").click(function () {if(!formValidate()){return;}WT.wt_confirm('是否导入?', function () {var formData = new FormData();formData.append("file",$('#file')[0].files[0]);$.ajax({url: '${base}/a/team/importteam',  
type: 'POST',data: formData,contentType: false,processData: false,success: function (data) {if(data.code == 0){window.parent.exportData(data.msg);WT.wt_close();}else{layer.msg(data.msg);}},error: function (data) {layer.msg(data.msg);}});/*WT.wt_ajax_jsonobject('${base}/a/questions/importQuestion',formData, function(data) {if(data.code == 0){window.parent.exportData("导入成功!");WT.wt_close();}});*/});});$("#admin-user-don").click(function () {window.location.href = "/a/file/s/dev/teames.xls";});$("#admin-user-colse").click(function () {WT.wt_close();});});function formValidate() {if (!$("#file").val().trim()) {WT.wt_msg('请选择文件!');return false;} else {var suffix = '';try {var flieArr = $("#file").val().split('.');suffix = flieArr[flieArr.length - 1];} catch (err) {suffix = '';}if (!suffix) {WT.wt_msg('请选择excel的文件!');return false;}var result = ['xls', 'xlsx'].indexOf(suffix.toLocaleLowerCase()) !== -1;if (!result) {WT.wt_msg('请选择excel的文件!');return false;}return true;}}
</script>
</body>
</html>

后端部分:

private static String TEMP_PATH = System.getProperty("java.io.tmpdir");

先通过get请求访问以上页面代码

//导入
@GetMapping("importes")
public String c(Model model) {return "a/team/team_admin_importes";

 

/*** 导入题目* @param file* @param request* @return*/
@PostMapping("/importteam")//这里就是上面绿色背景前端代码通过post请求这个接口
public @ResponseBody Map<String, Object> importteam(@ApiParam(required = true) @RequestBody @RequestParam MultipartFile file, HttpServletRequest request) {Map<String, Object> map = new HashMap<String, Object>();if(file == null) {map.put("code", 1);map.put("msg", "文件为空");return map;}File tempFile = null;try {String fileUuid = UUID.randomUUID().toString().replaceAll("-", "");String fileName = fileUuid + "." + StringUtils.substringAfterLast(file.getOriginalFilename(), ".");tempFile = new File(TEMP_PATH + File.separator + fileName);file.transferTo(tempFile);DecimalFormat format = new DecimalFormat("#");ExcelImportUtils ie = new ExcelImportUtils();List<List<Object>> list = ie.read(tempFile);if(list == null || list.size() < 1) {map.put("code", 1);map.put("msg", "文件为空");return map;}System.out.println(list.size());//excel第一行为标题for(int i = 1; i < list.size(); i++) {AccountDetailIO ques = new AccountDetailIO(); 
//这个AccountDetailIO  io对应的是你新增接口的io,等一下要进行调用新增接口的List<Object> cellList = list.get(i);//题干//专业ques.setRealname(cellList.get(0).toString());//这是读取第二行第一列的excel值String certNum = cellList.get(3).toString();//这是读取第二行第四列的excel值,因为我这个值是一串长数字,会被以科学计算法显示,下面的方法就可以避免.if(certNum!=null) {String aaa = new BigDecimal(certNum).stripTrailingZeros().toString();if (aaa.contains("E")) {aaa = format.format(new BigDecimal(aaa));ques.setCertNum(aaa);}else{ques.setCertNum(aaa);}System.out.println(aaa+"12121212");}ques.setRemark(cellList.get(5).toString());//下面再调取新增接口,导入就完成了authService.saveTeam(ques);map.put("code", 0);map.put("msg", "导入成功");}} catch (Exception e) {e.printStackTrace();map.put("code", 1);map.put("msg", "文件为空");} finally {if(tempFile != null) {tempFile.delete();}}return map;
}

//导入工具类

public class ExcelRenderUtil {

    private final static String CONTENT_TYPE = "application/msexcel;charset=utf-8";
    private List<?>[] data;
    private String[][] headers;
    private String[] sheetNames = new String[]{};
    private int cellWidth;
    private String[] columns = new String[]{};
    private String fileName = "file.xls";
    private int headerRow;
    private String version;
    protected String view;
    protected HttpServletRequest request;
    protected HttpServletResponse response;

    public ExcelRenderUtil(HttpServletRequest request, HttpServletResponse response, List<?>[] data) {
        this.request = request;
        this.response = response;
        this.data = data;
    }

    public static ExcelRenderUtil me(HttpServletRequest request, HttpServletResponse response, List<?>... data) {
        return new ExcelRenderUtil(request, response, data);
    }

    public void render() {
        response.reset();
        response.setHeader("Content-disposition", "attachment; " + FileRenderUtil.encodeFileName(this.request, fileName));
        response.setContentType(CONTENT_TYPE);
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.addHeader("Access-Control-Allow-Headers", Constants.kAuth_xAccessToken);
        response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
        OutputStream os = null;
        try {
            os = response.getOutputStream();
            PoiExporter.data(data).version(version).sheetNames(sheetNames).headerRow(headerRow).headers(headers).columns(columns)
                    .cellWidth(cellWidth).export().write(os);
        } catch (Exception e) {
            throw new RenderException(e);
        } finally {
            try {
                if (os != null) {
                    os.flush();
                    os.close();
                }
            } catch (IOException e) {
                System.err.println(e.getMessage());
            }

        }
    }

    public ExcelRenderUtil headers(String[]... headers) {
        this.headers = headers;
        return this;
    }

    public ExcelRenderUtil headerRow(int headerRow) {
        this.headerRow = headerRow;
        return this;
    }

    public ExcelRenderUtil columns(String... columns) {
        this.columns = columns;
        return this;
    }

    public ExcelRenderUtil sheetName(String... sheetName) {
        this.sheetNames = sheetName;
        return this;
    }

    public ExcelRenderUtil cellWidth(int cellWidth) {
        this.cellWidth = cellWidth;
        return this;
    }

    public ExcelRenderUtil fileName(String fileName) {
        this.fileName = fileName;
        return this;
    }

    public ExcelRenderUtil version(String version) {
        this.version = version;
        return this;
    }

}

导入模板你需要在D盘或其他盘建一个textFile文件夹下建一个dev文件夹存放excel模板,项目完成之后最好把模板传到服务器

 

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

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

相关文章

EasyExcel实现Excel文件导入导出

1 EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档: https://www.yuque.com/easyexcel/doc/easyexcel B站视频: https://www.bilib…

导出Excel表格(调用后端接口方式)

在开发中我们会遇到导出Excel表格的需求&#xff0c;但是导出分为前端生成和后端生成。 前端生成的方式CSDN其他小伙伴已经做出了很多教程&#xff0c;是依赖 xlsx插件。 但是&#xff0c;今天我讲的是&#xff0c;调用后端接口的方式生成Excel表格。 1.调用后端提供的导出接口…

如何快速构建网站chatgpt插件

在本文中&#xff0c;我们将一步一步地探索并构建一个名为"AI Prompt Testing"的项目。该项目是一个网站插件&#xff0c;旨在帮助网站生成一个ChatGPT提示测试题&#xff0c;以巩固当前网页的内容。 1、抽象提取 这个网站chatgpt插件大概的效果&#xff0c;类比的…

【ChatGPT】ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。

ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。 更新了 4 月 25 日,集成自治代理 AI 部分。 图片来源:作者,Midjourney。 目录 ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。…

伟大的创造不是计划出来的!来自OpenAI科学家的反直觉建议

来源 | 中国企业家杂志 每天几乎从一睁眼&#xff0c;我们的工作与生活都会被大大小小的目标所牵引。 诚然&#xff0c;若只想实现一些普普通通的小愿望&#xff0c;那么目标导向会非常有效。但对于那些与探索创造、创新发明有关的愿望&#xff0c;目标还有效吗&#xff1f; 近…

GitHub放大招!CEO现场挑战18分钟开发小游戏,人还在台上网友已经玩到了

梦晨 明敏 发自 凹非寺量子位 | 公众号 QbitAI GitHub CEO&#xff0c;直播AI写代码&#xff0c;挑战18分钟完成一个小游戏。 结果只用了不到15分钟&#xff0c;直接成功在线部署&#xff0c;这边人还在讲台上&#xff0c;全球网友已经能玩上了。 整个项目从一片空白的新建文件…

字节跳动副总裁谢欣:未来组织的30条思考

上一篇&#xff1a;支付系统就该这么设计&#xff0c;稳的一批&#xff01;&#xff01; 透明、共享是是创造愉悦工作环境、吸引牛人的前提&#xff0c;是弹性组织有效运作的根基&#xff0c;是未来组织的基石。 来源 | 华麓之音 01 组织升级&#xff1a; 员工需要被激发&#…

用ChatGPT实际沟通的结果[有图有真相]

笔者因为没有办法正常注册账号&#xff0c;所以使用的是试用版的chatgpt&#xff0c;语言模型当下试用版的是Chatgpt3.5的模型&#xff0c;而不是商用版的ChatGPT-4的模型。 首先问AI对单词词汇的含义的理解。 回答的很得体&#xff0c; 然后问对职业的区分&#xff0c;这些我都…

CnOpenData·A股上市公司标准数据

一、数据简介 按照《中华人民共和国标准化法》的定义&#xff0c;标准是指农业、工业、服务业以及社会事业等领域需要统一的技术要求。标准作为一种通用性的规范语言&#xff0c;在合理利用国家资源、保障产品质量、提高市场信任度、促进商品流通、维护公平竞争、保障安全等方面…

ChatGPT炒股:批量下载北交所上市公司的招股说明书

打开北京证券交易所官网&#xff0c;点击发行上市&#xff0c;然后点击公开发行信息披露&#xff0c;然后在查询框里面输入关键词&#xff1a;在北京证券交易所上市招股说明书&#xff0c;然后选择时间&#xff0c;点击查询&#xff0c;就可以看到所有北交所上市公司的招股说明…

万兴科技WondershareFilmora焕新上线已率先接入ChatGPT母公司OpenAI相关服务

AIGC加速布局&#xff01;近日&#xff0c;创意软件A股上市公司万兴科技&#xff08;300624.SZ&#xff09;旗下视频创意软件Wondershare Filmora焕新上线&#xff0c;新版本全新接入ChatGPT母公司OpenAI相关服务&#xff0c;率先在视频创作领域集成AIGC新技术。另据介绍&#…

巴比特 | 元宇宙每日必读:多家上市公司宣布将ChatGPT与虚拟数字人融合,是蹭概念,还是真未来?...

摘要&#xff1a;据财联社星矿数据统计&#xff0c;截至目前&#xff0c;A股中包括元隆雅图、风语筑、天娱数科等17家上市公司公布称&#xff0c;相关业务已经接入类似ChatGPT技术&#xff0c;或正在研究相关技术与数字人结合的应用场景。多位业内人士表示&#xff0c;接入Chat…

ChatGPT 回答什么是敏捷测试

Jenkins 官方文档&#xff1a;https://jenkins.io/doc/JUnit 插件文档&#xff1a;JUnit | Jenkins pluginTestNG 插件文档&#xff1a;https://plugins.jenkins.io/testng-plugin/Jenkins 教程&#xff1a;https://jenkins.io/doc/tutorials/JUnit 教程&#xff1a;JUnit 5 Us…

chatGPT回答如何使用axios?

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;可以用于浏览器和 node.js 中。 要使用 Axios&#xff0c;首先需要在项目中安装它&#xff1a; npm install axios然后&#xff0c;可以在你的代码中引入 Axios&#xff1a; const axios require(axios);或者&#xf…

面试题总结

1.js的数据类型 分为基本数据类型和引用数据类型。 基本数据类型 ES5的5种&#xff1a;Null&#xff0c;undefined&#xff0c;Boolean&#xff0c;Number&#xff0c;String&#xff0c; ES6新增&#xff1a;Symbol表示独一无二的值 ES10新增&#xff1a;BigInt 表示任意大的…

市场营销新视角,从这一步开始与竞对拉开距离|身份云研究院

2022 年&#xff0c;所有市场人都在讨论 AIGC 将带来怎样的内容创作变革&#xff0c;在迅速拥抱新技术以及新机遇的同时&#xff0c;不断成长的生成式 AI 也为很多市场人带来了危机。 以 ChatGPT 为例&#xff0c;它可以搜集互联网中的权威信息&#xff0c;迅速撰写出一份你需要…

过于自信,结果被面试官吊打了。。。

因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号&#xff0c;领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇&#xff1a;ChatGPT研究框架&#xff08;80页PPT&#xff0c;附下载&#xff09;…

短视频seo抖音矩阵源码开发搭建技术解析

一、 短视频seo抖音矩阵源码开发需要考虑以下几个方面&#xff1a; 技术选型&#xff1a;选择合适的开发语言、框架和数据库&#xff0c;常用的开发语言有Java、PHP等&#xff0c;常用的框架有Spring、Django等&#xff0c;常用的数据库有MySQL、MongoDB等。 服务器的选择&…

短视频抖音账号矩阵系统源码开发分享

引用&#xff1a;MySQL数据库&#xff0c;NGINX&#xff0c;PHP7.4&#xff0c;MySQL5.7&#xff0c;redis 媒体组件 组件 描述 image 图片 图片。支持 JPG、PNG、SVG、WEBP、GIF 等格式。 video 视频 视频组件。相关 API 请参考 tt.createVideoContext。 开发背景&…

短视频账号矩阵系统如何技术嵌入Chatgpt?

将GPT&#xff08;Generative Pre-trained Transformer&#xff09;嵌入短视频账号矩阵系统需要以下步骤&#xff1a; 1. 获取GPT模型&#xff1a;可以自行训练或使用开源的预训练模型&#xff0c;如GPT-2、GPT-3等。 2. 导入GPT模型&#xff1a;将GPT模型导入到短视频账号矩…