Excel 一鍵上傳到數據庫

???? <a class="edit"? id="batchImport">?? 批量導入? </a>

js代碼彈窗:

??? $("#batchImport").click(function(){

//彈窗彈窗下列內容
?? ??? ??? ?var html='<form id="execlForm" method="post" enctype="multipart/form-data">';
?? ??? ??? ??? ?html+='<input type="file" name="file" id="execlFile"? accept="application/vnd.ms-excel"/>';
?? ??? ??? ??? ?html+='</form>';
?? ??? ??? ?layer.confirm(html, {
?? ??? ??? ??? ?? btn: ['導入','取消'] ,//按鈕
?? ??? ??? ??? ?title:'導入測試者'
?? ??? ??? ??? ?}, function(){
?? ??? ??? ??? ??? ?var file = $("#execlFile").val();
?? ??? ??? ??? ??? ?console.info(file);
?? ??? ??? ??? ??? ?var strFileName=file.replace(/^.+?\\([^\\]+?)(\.[^\.\\]*?)?$/gi,"$1");? //正則表達式獲取文件名,不帶后綴
?? ??? ??? ??? ??? ?var fileName=file.replace(/.+\./,"");
?? ??? ??? ??? ??? ?if(fileName==''){
?? ??? ??? ??? ??? ??? ?layer.msg('請選擇上傳文件!', {time:1000});
?? ??? ??? ??? ??? ??? ?return false;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?$.ajax({
?? ??? ??? ??? ??? ???? url: '<%=path %>/front/conner/uploadExecl.do?',
?? ??? ??? ??? ??? ???? type: 'POST',
?? ??? ??? ??? ??? ???? cache: false,
?? ??? ??? ??? ??? ???? data: new FormData($('#execlForm')[0]),
?? ??? ??? ??? ??? ???? processData: false,
?? ??? ??? ??? ??? ???? contentType: false
?? ??? ??? ??? ??? ?}).done(function(res) {
?? ??? ??? ??? ??? ??? ?console.info(res);
?? ??? ??? ??? ??? ??? ?if(res=="true"){
?? ??? ??? ??? ??? ??? ??? ?layer.msg('上傳成功', {time:1000});?? ?
?? ??? ??? ??? ??? ??? ??? ?setTimeout(function(){
?? ??? ??? ??? ??? ??? ??? ??? ?? table.ajax.reload().draw();
?? ??? ??? ??? ??? ??? ??? ??? ?},1500);
?? ??? ??? ??? ??? ??? ?}else{
?? ??? ??? ??? ??? ??? ??? ?layer.msg('上傳失敗'+res+'條數據', {time:1000});
?? ??? ??? ??? ??? ??? ??? ?setTimeout(function(){
?? ??? ??? ??? ??? ??? ??? ??? ?? table.ajax.reload().draw();
?? ??? ??? ??? ??? ??? ??? ??? ?},1500);
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?}).fail(function(res) {
?? ??? ??? ??? ??? ??? ?//console.info(res);
?? ??? ??? ??? ??? ?});
?? ??? ??? ??? ?});
?? ??? ?});?? ?
controllor控制代碼 ?

/**
?? ? * 批量導入測試者信息
?? ? * @param request
?? ? * @param response
?? ? * @param bankName
?? ? */
?? ?@RequestMapping("uploadExecl")
?? ?public void uploadBillFile(HttpServletRequest request, HttpServletResponse response){
?? ??? ?// TODO 設置 咨詢師編號 獲取session里
?? ??? ?Map map = sessionContext.get("frontUserInfo");
?? ??? ?String counselorId = (String) map.get("ID");//獲取咨詢師的id
?? ??? ?
?? ??? ?//list集合接收讀取excel文件
?? ??? ?List<MultipartFile> list = connerService.getMultipartFile(request);
?? ?
?? ??? ?if(list.size()==0){
?? ??? ??? ?out.out(response, "false");//表示未上傳文件
?? ??? ?}else{
?? ??? ??? ?String filename = list.get(0).getOriginalFilename();
?? ??? ??? ?//判斷讀取到的文件是否是excel格式
?? ??? ??? ?boolean flag = filename.endsWith(".xls");
?? ??? ??? ?if(flag){
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?//判斷正確則調用讀取excel文件的函數
?? ??? ??? ??? ??? ?out.out(response,? connerService.uploadBillFile(list.get(0),counselorId));
?? ??? ??? ??? ?} catch (Exception e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ??? ?out.out(response, "false");
?? ??? ??? ??? ?}
?? ??? ??? ?}else{
?? ??? ??? ??? ?out.out(response, "false");//上傳的文件不是excel文件
?? ??? ??? ?}
?? ??? ?}
?? ?}

//Service代碼

/**
?? ? * 獲取上傳批量導入測試者信息
?? ? * @param request
?? ? * @return
?? ? */
?? ?public List<MultipartFile> getMultipartFile(HttpServletRequest request) {
?? ??? ?List<MultipartFile> list = new ArrayList<MultipartFile>();
?? ??? ?CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
?? ??? ??? ??? ?request.getSession().getServletContext());
?? ??? ?// 判斷 request 是否有文件上傳,即多部分請求
?? ??? ?if (multipartResolver.isMultipart(request)) {
?? ??? ??? ?// 轉換成多部分request
?? ??? ??? ?MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
?? ??? ??? ?// 取得request中的所有文件名
?? ??? ??? ?Iterator<String> iter = multiRequest.getFileNames();
?? ??? ??? ?while (iter.hasNext()) {
?? ??? ??? ??? ?// 取得上傳文件
?? ??? ??? ??? ?MultipartFile file = multiRequest.getFile(iter.next());
?? ??? ??? ??? ?list.add(file);
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ??? ?return list;
?? ?}
?? ?/**
?? ? * 讀取excel文件的操作
?? ? * @param billFile
?? ? * @return
?? ? * @throws Exception
?? ? */
?? ?public String uploadBillFile(MultipartFile billFile,String counselorId) throws Exception {
?? ??? ?//創建集合
?? ??? ?List<List> tolList = new ArrayList<List>();
?? ??? ?InputStream is = billFile.getInputStream();
?? ??? ?//讀取excel文件的工作區域
?? ??? ?jxl.Workbook workbook = jxl.Workbook.getWorkbook(is);
?? ??? ?//設置只獲取excel文件的第一個工作區
?? ??? ?Sheet sheet = workbook.getSheet(0);
?? ??? ?//獲取行
?? ??? ?int rows = sheet.getRows();
?? ??? ?//獲取列
?? ??? ?int columns = sheet.getColumns();
?? ??? ?//外循環獲取行
?? ??? ?for(int i = 1; i < rows; i++){
?? ??? ??? ?
?? ??? ??? ?List eveList = new ArrayList<String>();
?? ??? ??? ?//定義布爾變量做標記
?? ??? ??? ?boolean flag=true;
?? ??? ??? ?//內循環列
?? ??? ??? ?for(int j = 0 ; j < 14 ;j++){
?? ??? ??? ??? ?//cell是jxl里的類,在這里獲取行和列
?? ??? ??? ??? ?Cell cell = sheet.getCell(j, i);
?? ??? ??? ??? ?String content = cell.getContents();
?? ??? ??? ??? ? //StringUtils.isBlank判斷某字符串是否為空或長度為0或由空白符
?? ??? ??? ??? ?if(StringUtils.isBlank(content)){
?? ??? ??? ??? ??? ?flag=false;
?? ??? ??? ??? ??? ?//為假跳出
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?//為真添加到集合
?? ??? ??? ??? ?eveList.add(content);
?? ??? ??? ??? ?}
?? ??? ??? ?//判斷為true添加到集合
?? ??? ??? ?if(flag){
?? ??? ??? ??? ?tolList.add(eveList);
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ??? ?
?? ??? ?
?? ??? ?//讀取excel文件,如果有錯誤返回一個異常信息
?? ??? ?List errorList = userInfoDao.saveBatchConner(tolList,counselorId) ;
?? ??? ?String result = "true";
?? ??? ?
?? ??? ?
?? ??? ?if(errorList.size() == 0){
?? ??? ?}else{
?? ??? ??? ?result = ""+errorList.size();
?? ??? ?}
?? ??? ?return result;
?? ?}
Dao層代碼

/**
?? ? * 咨詢師操作批量保存測試者,上傳excel操作
?? ? * 說明:函數主要讀取excel文件,保存實體
?? ? * @param tolList
?? ? * @return
?? ? */
?? ?public List saveBatchConner(List<List> toList,String counselorId) {
?? ??? ?//學號,姓名,性別,出生日期,民族,血型,qq,郵箱,獨生子女,單親,所在地區,職業,學歷,備注,咨詢師驗證。
?? ??? ?List<UserInfo> errorList=new ArrayList<UserInfo>();
?? ??? ?//提取execl列數據到屬性集合,循環excel的內容
?? ??? ?for(int i=0,len=toList.size();i<len;i++){
?? ??? ??? ?//獲取excel?? tolList.get(獲取一行).get(一行中的第一列).toString()
?? ??? ??? ?UserInfo userInfo = new UserInfo();
?? ??? ??? ?userInfo.setId(Uuid.getUuid());//獲取不重復編號
?? ??? ??? ?userInfo.setCounselorId(counselorId);
?? ??? ??? ?userInfo.setIsConner("1");//1表示是測試者
?? ??? ??? ?userInfo.setAccount(toList.get(i).get(0).toString());//獲取第一行第一列
?? ??? ??? ?userInfo.setUserName(toList.get(i).get(1).toString());//循環第一行第二列
?? ??? ??? ?userInfo.setSex(toList.get(i).get(2).toString());
?? ??? ??? ?userInfo.setBirthday(toList.get(i).get(3).toString());
?? ??? ??? ?userInfo.setNation(toList.get(i).get(4).toString());
?? ??? ??? ?userInfo.setBloodGroup(toList.get(i).get(5).toString());
?? ??? ??? ?userInfo.setQq(toList.get(i).get(6).toString());
?? ??? ??? ?userInfo.setEmail(toList.get(i).get(7).toString());
?? ??? ??? ?userInfo.setIsTheOnlyChild(toList.get(i).get(8).toString());//獨生
?? ??? ??? ?userInfo.setIsSingleParent(toList.get(i).get(9).toString());//單親
?? ??? ??? ?userInfo.setArea(toList.get(i).get(10).toString());//地區
?? ??? ??? ?userInfo.setProfession(toList.get(i).get(11).toString());//職業
?? ??? ??? ?userInfo.setEnducationlBackground(toList.get(i).get(12).toString());//學歷
?? ??? ??? ?userInfo.setRemark(toList.get(i).get(13).toString());//備注
?? ??? ??? ?
?? ??? ??? ? //保存到實體類
?? ??? ??? ?String flag=saveEntity(userInfo);
?? ??? ??? ? //如果有錯誤信息則返回一個集合
?? ??? ??? ?? if(!"true".equals(flag)){
?? ??? ??? ??? ?? errorList.add(userInfo);
?? ??? ??? ?? }
?? ??? ?}
?? ??? ?return errorList;
?? ?}

?

轉載于:https://www.cnblogs.com/zhuyuewei/p/6518114.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372753.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372753.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372753.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL——實例記錄(對查詢結果排行號)

select 訂單編號, DENSE_RANK() over(order by 訂單編號) from test 排序結果&#xff1a; 55678-0-1 1 55678-0-1 1 33454-0-1 2 33454-0-1 2 33454-0-1 2 這種是按照訂單不同的順序依次往后排 當然也可以在 over后面加上你想要的起始號 例&#xff1a;DE…

TeamCity構建依賴項

介紹 構建依存關系的主題既不重要也不是次要的。 各種構建工具從不同的角度處理此主題&#xff0c;從而提供各種解決方案&#xff0c;每種解決方案都有其優點和缺點。 熟悉發行版和快照依賴項的Maven和Gradle用戶可能不了解TeamCity快照依賴項&#xff0c;或者認為他們與Maven…

復選框操作checked選中為true,反之為False,也可以賦值為true,false

轉載于:https://www.cnblogs.com/shiluoliming/p/6518236.html

java 個稅計算_【JAVA300例】10、計算個人所得稅

邏輯是這樣的。每個等級計算的系數都不一樣。分別有多個檔位。要判斷處于什么檔位然后用特殊的公式去計算。原版是從小到大判斷&#xff0c;每次寫條件很煩。這里換成從大到小。節省敲代碼時間。import java.util.Scanner;public class Test010{public static void main(String…

Java是否越來越接受靜態導入?

曾經有一段時間&#xff0c;至少在禮貌的社會中&#xff0c;人們普遍認為使用“ 不是 ”一詞是不可接受的。 確實&#xff0c;那時&#xff08;也許直到今天&#xff09;&#xff0c;許多人確實&#xff08;也確實&#xff09;認為不是一個真實的詞。 盡管這個詞并沒有 引起爭議…

Stream 工具方法

inputstream 轉 string 1、使用字符流 InputStream is TestZhimaCustomerCertificationInitialize.class.getClassLoader().getResourceAsStream("config/rsa_private_key_pkcs8.pem"); InputStreamReader isr new InputStreamReader(is); BufferedReader br new…

從0開始學習 GitHub 系列匯總筆記

本文學習自Stromzhang, 原文地址請移步&#xff1a;從0開始學習 GitHub 系列匯總 我的筆記&#xff1a; 0x00 從0開始學習GitHub 系列之[初識GitHub] GitHub 影響力 a.全球頂級科技公司紛紛加入 GitHub &#xff0c;并貢獻他們自己的項目代碼 Google: https://github.com/goog…

Drools Guvnor –管理訪問

外部化業務或技術規則對于可伸縮應用程序非常重要&#xff0c;但是應該管理BRMS服務訪問。 guvnor使用基于角色的授權提供控件UI訪問和操作。 在drools-guvnor參考手冊中列出了幾種權限類型。 具有所有權限的管理員。 分析師或只讀分析師&#xff1a;特定類別的分析師權限。 軟…

java文件操作和_JAVA文件操作類和文件夾的操作

JAVA文件操作類和文件夾的操作package com.gamvan.tools;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import jav…

CCNA基礎知識摘錄

cisco設備的啟動要點&#xff1a;1、檢測硬件(保存在rom)2、載入軟件&#xff08;IOS&#xff09;&#xff08;保存在Flash&#xff09;3、調入配置文件&#xff08;密碼&#xff0c;IP地址&#xff0c;路由協議都保存在此&#xff09;&#xff08;此文件保存在NVRAM&#xff0…

【VS開發】IP地址格式轉換(htonl、ntohl;inet_addr、inet_ntoa)

1、htonl ()和ntohl( ) u_long PASCAL FAR ntohl (u_long netlong); u_short PASCAL FAR ntohs (u_short netshort); ntohl( )-----網絡順序轉換成主機順序 u_long PASCAL FAR htonl (u_long hostlong); u_short PASCAL FAR htons (u_short hostshort); htonl ()-----主機順序轉…

SOA示例應用程序

SOA描述了一組用于創建松散耦合的&#xff0c;基于標準的&#xff0c;與業務相關的服務的模式&#xff0c;由于描述&#xff0c;實現和綁定之間的關注點分離&#xff0c;因此提供了新的靈活性。 近年來&#xff0c;至少在參與大多數信息技術活動的人們中&#xff0c;面向服務的…

java 分貝_java11教程--jhsdb命令

您可以使用該jhsdb工具將Java進程或崩潰的Java虛擬機(JVM)的核心轉儲連接。概要jhsdb clhsdb [--pid pid | --exe executable --core coredump]jhsdb debugd [options] (pid | executable coredump) [server-id]jhsdb hsdb [--pid pid | --exe executable --core coredump]jhsd…

Oracle使用startup與startup force啟動的區別

1. startup 就是正常啟動數據庫&#xff0c;沒什么好說的。 2. startup force 是shutdown abort startup的組合&#xff0c;即強制關閉數據庫 正常啟動數據庫&#xff0c;想快速重啟數據庫時膽子大的人用的。 startup force測試 在一個窗口執行startup force 命令 點擊(此…

js點擊button按鈕跳轉到頁面代碼

www.111cn.net 編輯:smoke 來源:轉載在網頁中button按鈕不具備a標簽的屬性了&#xff0c;如果我們要給button 按鈕增加跳轉事件我們可以在它的確onclick事件上點擊跳轉js來實現&#xff0c;下面我來給大家介紹一些常用的方法。點擊按鈕怎么跳轉到另外一個頁面呢&#xff1f;我們…

Mac OS X上的Java Memcached

介紹 在本文中&#xff0c;我將解釋如何&#xff1a; 在Mac OS X上安裝和配置Memcached 在Java應用程序中使用Memcached 我不會過多地介紹在您的應用程序中使用分布式緩存的好處&#xff0c;但是至少讓我們提供一些在企業門戶&#xff08;在我的情況下為eXo平臺&#xff09;…

Js實現內容向上無縫循環滾動

當前項目有一個類似公告向上滾動的需求&#xff0c;在網上搜索到一個比較棒的程序&#xff0c;現摘錄如下&#xff1a; //document.getElementById()的最簡化應用 function $(element) {if (arguments.length > 1) {for (var i 0, length arguments.length, elements [];…

Repeater 中TextBox 觸發TextChanged事件

兩種方法 1.TextBox 綁定TextChanged 并設置AutoPostBack "true" &#xff0c;如果不設置AutoPostBack "true"則不會觸發TextChanged事件&#xff0c;然后在對應的方法里面循環Repeater查找改變項 部分代碼 <ItemTemplate ><tr><td style &…

什么是Spring Integration?

隨著Spring Integration項目逐漸獲得越來越多的采用和興趣&#xff0c;企業集成或企業開發領域的開發人員很可能會遇到它。 他們可能會發現它很有趣&#xff0c;但并沒有完全理解它的含義&#xff0c;所要解決的問題&#xff0c;可以從中獲取更多信息以及它在ESB和其他SOA基礎結…

java jmap mat_java內存調優之jmap,jstack,mat

查看整個JVM內存狀態jmap -heap [pid]要注意的是在使用CMS GC 情況下&#xff0c;jmap -heap的執行有可能會導致JAVA 進程掛起查看JVM堆中對象詳細占用情況jmap -histo [pid]可以通過jmap -histo [pid] | head -20查看top20的實例個數以及內存占用情況導出整個JVM 中內存信息&a…