<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
formdata物件上傳了csv檔案,讀取檔案內容拼接成json物件
var form = new FormData(); var files = $("#getfile")[0].files; var reader = new FileReader(); reader.readAsText( files[0],"gbk" ); //以文字格式讀取 reader.onload = function(evt){ var data = evt.target.result; //讀到的資料 console.log(data); splitdate = data.split(/s+/) ; console.log(splitdate.length) var arr1=new Array(); var arr2=new Array(); var phone=new Array(); var name=new Array(); for(var i=0;i<splitdate.length;i++){ var data =splitdate[i].split(","); arr1.push(data[0]) arr2.push(data[2]) } for(var i=1;i<arr1.length-1;i++){ name.push(arr1[i]) } for(var i=1;i<arr2.length-1;i++){ phone.push(arr2[i]) } var userList = []; for(var i=0;i<name.length;i++){ var json = {}; json.value = name[i]; json.name = phone[i]; console.log(json); userList.push(json); } console.log(userList) }
最終拼接成為key value格式的json物件
為了減少伺服器的壓力,需要前端讀取檔案資料,然後自己拼接分批提交給後臺,這裡將讀檔案記錄下來
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>讀取檔案</title> <script src="js/shim.js"></script> <script src="js/xlsx.full.min.js"></script> <script src="js/jschardet.min.js"></script> </head> <body> <input type='file' value="" id="read" > </body> <script> String.prototype.trim=function(){ //給字串新增一個去前後空格的方法 return this.replace(/s|xA0/g,""); } window.οnlοad=function(){ var file=document.getElementById("read"); file.addEventListener("change",read,false); /*function resetInpuFile() { //定義一個重置input file控制元件的方法,否則如果檔案不變,不能再次觸發input控制元件的onchange事件 var control = event.target; //control.replaceWith(control = control.clone(true)); //這個重置方法對vue沒用,vue的事件不是直接繫結的,所以複製不了 control.wrap('<form>').closest('form').get(0).reset(); //用一個form包裹input,呼叫form的reset方法,然後解除包裹 control.unwrap(); }*/ function read(e){ //獲取檔案型別 var filename=e.target.files[0].name; var phoneStr = ''; var messageContent=''; console.log(filename); var fileType=filename.substr(filename.lastIndexOf('.')+1,filename.length); console.log(fileType); //檢測是瀏覽器是否支援readAsBinaryString函數 var rABS = typeof FileReader !== 'undefined' && typeof FileReader.prototype !== 'undefined' && typeof FileReader.prototype.readAsBinaryString !== 'undefined'; var reader=new FileReader(); if(rABS){ reader.readAsBinaryString(e.target.files[0]);//發起非同步請求 }else{ reader.readAsArrayBuffer(e.target.files[0]);//發起非同步請求 } //reader.readAsDataURL(e.target.files[0]);//發起非同步請求 //reader.readAsArrayBuffer(e.target.files[0]);//發起非同步請求 reader.οnlοad=function(e){ var data = e.target.result; if (fileType == 'txt' || fileType == 'csv') { //txt或csv檔案直接讀取 //console.log(data); var str = null; var viewBuf = null; if (rABS) { str = data; //此時data為binarystring,需要把binarystring轉換為Uint8Array var newArray = []; for (var index = 0; index < data.length; index++) { newArray.push(data.charCodeAt(index)); } viewBuf = new Uint8Array(newArray); } else { viewBuf = new Uint8Array(data); //此時data為ArrayBuffer for (var index in viewBuf) { str += String.fromCharCode(viewBuf[index]); if (index >= 100) { //考慮到效率,只取前1000個用於判斷字元集 break; } } } //console.log(str); var codepage = jschardet.detect(str.substring(0, 1000)).encoding; //console.log(codepage); if (codepage == 'GB2312' || codepage == 'GB18030') { codepage = 'GB18030'; } else if (codepage == 'ascii' || codepage == 'UTF-8' || codepage == 'UTF-16BE' || codepage == 'UTF-16LE') { } else { alert('不支援的編碼格式:' + codepage + ';你只能使用UTF-8或GB18030(GB2320,GBK)編碼格式檔案'); // resetInpuFile(); return; } phoneStr = new TextDecoder(codepage).decode(viewBuf); console.log(phoneStr); } else if (fileType == 'xls' || fileType == 'xlsx') { //excle檔案用js-xlsx解析 function fixdata(data) { //arrayBuffer轉base64字串 var o = "", l = 0, w = 10240; for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); o += String.fromCharCode.apply(null, new Uint8Array(data.slice(o.length))); return o; } function get_columns(sheet, type) { //獲取head頭(excel檔案第一行) var val, rowObject, range, columnHeaders, emptyRow, C; if (!sheet['!ref']) return []; range = XLS.utils.decode_range(sheet["!ref"]); columnHeaders = []; for (C = range.s.c; C <= range.e.c; ++C) { val = sheet[XLS.utils.encode_cell({ c: C, r: range.s.r })]; if (!val) continue; columnHeaders[C] = type.toLowerCase() == 'xls' ? XLS.utils.format_cell(val) : val.v; //console.log(val, columnHeaders[C]); } return columnHeaders; } var readtype = { type: rABS ? 'binary' : 'base64' }; if (!rABS) { arr = fixdata(data); data = btoa(arr); } //console.log('data:' + data); try { var workbook = XLSX.read(data, readtype); //workbook.SheetNames[0]是獲取Sheets中第一個Sheet的名字,workbook.Sheets[Sheet名]獲取第一個Sheet的資料 } catch (e) { alert('無法讀取的excel檔案,格式錯誤'); resetInpuFile(); return; } //console.log(wb); var XL = fileType.toUpperCase() === 'XLS' ? XLS : XLSX; //選擇是XLS物件還是XLSX物件 workbook.SheetNames.forEach(function (sheetName) { var roa = XL.utils.sheet_to_json(workbook.Sheets[sheetName], { raw: true }); // console.log(roa); if (roa.length <= 0) { return; } var columns = get_columns(workbook.Sheets[sheetName], fileType); //獲取本sheet的第一行 var keyName = ''; var keyName1=''; for (var index in columns) { //檢視第一行的列裡是否有諸如手機號碼這樣列名 //if ($.trim(columns[index]) === '手機號碼') { if (columns[index].trim() === '手機號碼') { keyName = columns[index]; continue; } //if($.trim(columns[index]) === '簡訊內容'){ if(columns[index].trim() === '簡訊內容'){ keyName1 = columns[index]; continue; } } if (keyName === '') { //沒找到,返回 // console.log('沒找到key'); return; } if (keyName1 === '') { //沒找到,返回 // console.log('沒找到key'); return; } for (var index=0;index<roa.length;index++) {//這裡吧讀出來的資料存成字串 if(roa[index][keyName]!='' && roa[index][keyName1]!=''){ phoneStr += roa[index][keyName] + ','; messageContent +=(roa[index][keyName1]).replace(/,/g,',')+','; } } // }); //console.log(phoneStr); if (phoneStr === '' || messageContent==='') { alert('沒有在excle檔案中找到"手機號碼或者簡訊內容"列'); // resetInpuFile(); return; } } console.log(phoneStr) console.log(messageContent) // resetInpuFile(); } } } </script> </html>
這裡主要用到h5的fileReader API以及xlsx.js, jschardet.js外掛讀取四種型別的檔案
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45