JS實現(xiàn)導出Excel和CSV文件操作
更新時間:2022年05月04日 11:47:35 作者:農(nóng)碼一生
這篇文章介紹了JS實現(xiàn)導出Excel和CSV文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、js導出Excel
<html>
<head>
</head>
<body>
<script type="text/javascript" src="./xlsx.core.min.js"></script>
<script type="text/javascript">
/**
* 通用的打開下載對話框方法,沒有測試過具體兼容性
* @param url 下載地址,也可以是一個blob對象,必選
* @param saveName 保存文件名,可選
*/
function openDownloadDialog(url, saveName) {
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url); // 創(chuàng)建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || ''; // HTML5新增的屬性,指定保存文件名,可以不要后綴,注意,file:///模式下不會生效
var event;
if (window.MouseEvent) event = new MouseEvent('click');
else {
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
}
// 將一個sheet轉成最終的excel文件的blob對象,然后利用URL.createObjectURL下載
function sheet2blob(sheet, sheetName) {
sheetName = sheetName || 'sheet1';
var workbook = {
SheetNames: [sheetName],
Sheets: {}
};
workbook.Sheets[sheetName] = sheet;
// 生成excel的配置項
var wopts = {
bookType: 'xlsx', // 要生成的文件類型
bookSST: false, // 是否生成Shared String Table,官方解釋是,如果開啟生成速度會下降,但在低版本IOS設備上有更好的兼容性
type: 'binary'
};
var wbout = XLSX.write(workbook, wopts);
var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" });
// 字符串轉ArrayBuffer
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
return blob;
}
</script>
<script type="text/javascript">
var exportDataSource = [{
name: '路人甲',
phone: '123456789',
email: '000@123456.com'
}, {
name: '炮灰乙',
phone: '123456789',
email: '000@123456.com'
}, {
name: '土匪丙',
phone: '123456789',
email: '000@123456.com'
}, {
name: '流氓丁',
phone: '123456789',
email: '000@123456.com'
}, ]; //導出json數(shù)據(jù)源
function exportExcel() {
var excelItems = [];
for (let i = 0; i < exportDataSource.length; i++) {
if (exportDataSource[i].name != "") {
excelItems.push({
"姓名": exportDataSource[i].name,
"電話": exportDataSource[i].phone,
"郵箱": exportDataSource[i].email
}); //屬性
}
}
var sheet = XLSX.utils.json_to_sheet(excelItems);
openDownloadDialog(sheet2blob(sheet), 'exportdata.xlsx');
}
</script>
<a style="float: right;" onclick="exportExcel()">導出下載</a>
</body>
</html>二、js實現(xiàn)json導出csv
<html>
<head>
<p style="font-size: 20px;color: red;">使用a標簽方式將json導出csv文件</p>
<button onclick='tableToExcel()'>導出</button>
</head>
<body>
<script>
function tableToExcel(){
//要導出的json數(shù)據(jù)
const jsonData = [
{
name:'路人甲',
phone:'123456789',
email:'000@123456.com'
},
{
name:'炮灰乙',
phone:'123456789',
email:'000@123456.com'
},
{
name:'土匪丙',
phone:'123456789',
email:'000@123456.com'
},
{
name:'流氓丁',
phone:'123456789',
email:'000@123456.com'
},
]
//列標題,逗號隔開,每一個逗號就是隔開一個單元格
let str = `姓名,電話,郵箱\n`;
//增加\t為了不讓表格顯示科學計數(shù)法或者其他格式
for(let i = 0 ; i < jsonData.length ; i++ ){
for(let item in jsonData[i]){
str+=`${jsonData[i][item] + '\t'},`;
}
str+='\n';
}
//encodeURIComponent解決中文亂碼
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
//通過創(chuàng)建a標簽實現(xiàn)
let link = document.createElement("a");
link.href = uri;
//對下載的文件命名
link.download = "json數(shù)據(jù)表.csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
</body>
</html>三、js實現(xiàn)json導出csv
<html>
<head>
<p style="font-size: 20px;color: red;">使用table標簽方式將json導出xls文件</p>
<button onclick='tableToExcel()'>導出</button>
</head>
<body>
<script>
function tableToExcel(){
//要導出的json數(shù)據(jù)
const jsonData = [
{
name:'路人甲',
phone:'123456',
email:'123@123456.com'
},
{
name:'炮灰乙',
phone:'123456',
email:'123@123456.com'
},
{
name:'土匪丙',
phone:'123456',
email:'123@123456.com'
},
{
name:'流氓丁',
phone:'123456',
email:'123@123456.com'
},
]
//列標題
let str = '<tr><td>姓名</td><td>電話</td><td>郵箱</td></tr>';
//循環(huán)遍歷,每行加入tr標簽,每個單元格加td標簽
for(let i = 0 ; i < jsonData.length ; i++ ){
str+='<tr>';
for(let item in jsonData[i]){
//增加\t為了不讓表格顯示科學計數(shù)法或者其他格式
str+=`<td>${ jsonData[i][item] + '\t'}</td>`;
}
str+='</tr>';
}
//Worksheet名
let worksheet = 'Sheet1'
let uri = 'data:application/vnd.ms-excel;base64,';
//下載的表格模板數(shù)據(jù)
let template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
<x:Name>${worksheet}</x:Name>
<x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
</head><body><table>${str}</table></body></html>`;
//下載模板
window.location.href = uri + base64(template)
}
//輸出base64編碼
function base64 (s) { return window.btoa(unescape(encodeURIComponent(s))) }
</script>
</body>
</html>四、js實現(xiàn)Tab轉為Excel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>excel 導出測試</title>
<style>
table {
border-collapse: collapse;
text-align: center;
vertical-align: middle;
width: 800px;
font-size: 20px;
}
button {
height: 30px;
width: 100px;
margin: 20px 20px;
background: yellowgreen;
border-radius: 10px;
outline: none;
}
input {
height: 30px;
padding-left: 10px;
margin: 10px;
}
</style>
</head>
<body>
<div id="wrap" style="width:900px;margin:20px auto;">
<h3>js腳本 導出excel測試</h3>
<table id="tb" border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th>ID</th>
<th>姓名</td>
<th>年齡</td>
<th>座右銘</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>張三</td>
<td>18</td>
<td>走的人多了,變成了路。</td>
</tr>
<tr>
<td>2</td>
<td>李四</td>
<td>88</td>
<td>人人都有自己走的路,哪條屬于自己呢?</td>
</tr>
<tr>
<td>3</td>
<td>王五</td>
<td>81</td>
<td>走別人的路,讓他沒道可走!</td>
</tr>
</tbody>
</table>
<label>
姓名:<input type="text" autocomplete id="name" placeholder="請輸入您的姓名..." >
</label>
<label>
年齡:<input type="text" autocomplete id="age" placeholder="請輸入您的年齡...">
</label>
<label>
座右銘:<input type="text" autocomplete id="sex" placeholder="請輸入您的座右銘..." >
</label>
<button id="add">添加信息</button>
<button id="out" onclick="btn_export()">導出文件</button>
</div>
<script src="./xlsx.core.min.js"></script>
<script src="./jquery.min.js"></script>
<script src="./excel.js"></script>
<script>
function btn_export() {
var table = document.querySelector("#tb");
var sheet = XLSX.utils.table_to_sheet(table); //將一個table對象轉換成一個sheet對象
openDownloadDialog(sheet2blob(sheet), 'excel.xlsx');
}
var id = $("input").length + 1;
$(function() {
$("#add").click(function() {
var name = $("#name").val();
var age = $("#age").val();
var sex = $("#sex").val();
$("tbody").append("<tr><td>" + id + "</td><td>" + name + "</td> <td>" + age + "</td> <td>" + sex + "</td></tr>");
id++;
$("input").val('');
});
})
</script>
</body>
</html>到此這篇關于JS實現(xiàn)導出Excel和CSV文件的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
js實現(xiàn)小球在頁面規(guī)定的區(qū)域運動
這篇文章主要為大家詳細介紹了js控制小球在規(guī)定范圍運動,碰到邊界就改變運動方向,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06
解決BootStrap Fileinput手機圖片上傳顯示旋轉問題
這篇文章主要介紹了 BootStrap Fileinput手機圖片上傳顯示旋轉問題,需要的朋友可以參考下2017-06-06
JavaScript實現(xiàn)簡單的文本逐字打印效果示例
這篇文章主要介紹了JavaScript實現(xiàn)簡單的文本逐字打印效果,涉及javascript結合時間函數(shù)動態(tài)操作頁面元素相關實現(xiàn)技巧,需要的朋友可以參考下2018-04-04

