<html>
<head>
<p style="font-size: 20px;color: red;">使用table標籤方式將json導出xls文件</p>
<button onclick='tableToExcel()'>導出</button>
</head>
<body>
<script>
var weekStart = '2019-03-17'
var weekEnd = '2019-03-23'
function tableToExcel() {
//要導出的json數據
const jsonData = [
{
SD: '2019-03-17 00:00',
ED: '2019-03-17 17:00',
TI: '今每天氣真好'
},
{
SD: '2019-03-18 01:00',
ED: '2019-03-18 17:00',
TI: '大河大河'
},
{
SD: '2019-03-18 00:00',
ED: '2019-03-18 12:00',
TI: '大河大河'
},
{
SD: '2019-03-20 02:00',
ED: '2019-03-20 14:00',
TI: '真好'
},
{
SD: '2019-03-17 00:00',
ED: '2019-03-17 12:00',
TI: '今你們好'
}
]
let data = dataProcessing(jsonData)
console.log(data)
//列標題
let str = '<tr><td>全天</td>'
for (let v of data) {
for (let i in v) {
str += `<td>${i}</td>`
}
}
str += '</tr>'
// 7天標題
// let str = '<tr>'
// for (let i = 0; i < 6; i++) {
// for (let i in v) {
// str += `<td>${i}</td>`
// }
// }
// str += '</tr>'
// console.log(str)
// return
// // 循環遍歷,每行加入tr標籤,每一個單元格加td標籤
// for (let i = 0; i < jsonData.length; i++) {
// str += '<tr>';
// for (let item in jsonData[i]) {
// //增長\t爲了避免讓表格顯示科學計數法或者其餘格式
// str += `<td>${jsonData[i][item] + '\t'}</td>`;
// }
// str += '</tr>';
// }
// for (let i in data) {
// str += `<tr><td>${i}</td>`
// for (let a = 0; a < 6; a++) {
// str += `<tr><td>${i}</td>`
// }
// for (let data[i]) {
// }
// }
//Worksheet名
let worksheet = 'Sheet1'
let uri = 'data:application/vnd.ms-excel;base64,';
//下載的表格模板數據
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))) }
// 數據結構處理,把一天的數據歸爲一個對象
function dataProcessing(data) {
let list = []
for (let v of data) {
let st = v.SD.split(' ')[1] // 開始時間
let sh = st.split(':')[0] // 開始時間小時
switch (sh) {
case '00':
foo(list, v, sh)
break;
case '01':
foo(list, v, sh)
break;
case '02':
foo(list, v, sh)
break;
case '03':
foo(list, v, sh)
break;
case '04':
foo(list, v, sh)
break;
// case '05':
// obj[0][sd].push(t)
// break;
// case '06':
// obj[0][sd].push(t)
// break;
// case '07':
// obj[0][sd].push(t)
// break;
// case '08':
// obj[0][sd].push(t)
// break;
// case '09':
// obj[0][sd].push(t)
// break;
// case '10':
// obj[0][sd].push(t)
// break;
// case '11':
// obj[0][sd].push(t)
// break;
// case '12':
// obj[0][sd].push(t)
// break;
// case '13':
// obj[0][sd].push(t)
// break;
// case '14':
// obj[0][sd].push(t)
// break;
// case '15':
// obj[0][sd].push(t)
// break;
// case '16':
// obj[0][sd].push(t)
// break;
// case '17':
// obj[0][sd].push(t)
// break;
// case '18':
// obj[0][sd].push(t)
// break;
// case '19':
// obj[0][sd].push(t)
// break;
// case '20':
// obj[0][sd].push(t)
// break;
// case '21':
// obj[0][sd].push(t)
// break;
// case '22':
// obj[0][sd].push(t)
// break;
// case '23':
// obj[0][sd].push(t)
// break;}}
default:
break;
}
}
return list
function foo(data, v, val) {
let sd = v.SD.split(' ')[0] // 開始日期
let st = v.SD.split(' ')[1] // 開始時間
let sh = st.split(':')[0] // 開始時間小時
let ed = v.ED.split(' ')[0] // 結束日期
let et = v.ED.split(' ')[1] // 結束時間
let eh = et.split(':')[0] // 結束時間小時
let t = `${st}~${et} ${v.TI}` // 表格文本
let n = Number(val)
data[n] = data[n] ? data[n] : {}
data[n][sd] = data[n][sd] ? data[n][sd] : []
data[n][sd].push(t)
// data[小時][天]['真好','很是好'][0] 這個就是一格的內容
}
}
</script>
</body>
</html>