JS 데이터 엑셀 내 보 내기
10509 단어 JS 조작
방법 1:
tr, td 태그 등 을 통 해 table 을 표 에 출력 하 는 것 이 이 루어 집 니 다. 이러한 방법의 단점 은 위 엑셀 입 니 다. xls 를 접미사 로 하 는 파일 을 만 드 는 것 이 라 고 하지만 파일 형식 은 html 입 니 다. 코드 는 다음 과 같 습 니 다.
Document
table json xls
function tableToExcel() {
// json
var jsonData = [
{
name: ' ',
phone: '123456',
email: '[email protected]'
},
{
name: ' ',
phone: '123456',
email: '[email protected]'
},
{
name: ' ',
phone: '123456',
email: '[email protected]'
},
{
name: ' ',
phone: '123456',
email: '[email protected]'
},
]
//
var str = '<tr><td> </td><td> </td><td> </td></tr>';
// , 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>';
}
//Worksheet
var worksheet = 'Sheet1'
var uri = 'data:application/vnd.ms-excel;base64,';
//
var 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))) }
방법 2:
json 을 문자열 로 연결 하여 csv 파일 에 문자열 을 출력 합 니 다. 출력 된 파일 은 html 형식의 파일 이 아니 라 진정한 csv 파일 입 니 다. 코드 는 다음 과 같 습 니 다.
Document
a json csv
function tableToExcel() {
// json
var jsonData = [
{
name: ' ',
phone: '123456789',
email: '[email protected]'
},
{
name: ' ',
phone: '123456789',
email: '[email protected]'
},
{
name: ' ',
phone: '123456789',
email: '[email protected]'
},
{
name: ' ',
phone: '123456789',
email: '[email protected]'
},
]
// , ,
let str = ` , ,
`;
// \t
for (let i = 0; i < jsonData.length; i++) {
for (let item in jsonData[i]) {
str += `${jsonData[i][item] + '\t'},`;
}
str += '
';
}
//encodeURIComponent
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
// a
var link = document.createElement("a");
link.href = uri;
//
link.download = "json .csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
방법 3:
csv 가 되 어 csv 를 sheet 대상 으로 바 꾸 고 하나의 sheet 를 최종 엑셀 파일 의 blob 대상 으로 바 꾼 다음 URL. createObject URL 을 이용 하여 다운로드 합 니 다 (코드 에 몇 가지 함수 가 사용 되 지 않 은 것 같 지만 기능 을 실현 할 수 있 습 니 다. 저 는 상관 하지 않 습 니 다. 관심 있 는 것 은 간결 하 게 할 수 있 습 니 다. 이 방법 은 jquery. js (jquery. js) 에 의존 합 니 다.https://jquery.com/download/xlsx. core. min. js(https://download.csdn.net/download/dylbb818/9595652). 코드 는 다음 과 같 습 니 다.
JS excel
excel
var obj = {name:'xixi',sex:' '};
var arr = [{name:'haha',sex:' '},{name:'xixi',sex:' '}];
var arr2 = ['haha','xixi'];
var str;
for(let i = 0;i<arr2.length;i++){
str = arr2[i];
}
var st1 = JSON.stringify(arr);
var st2 = JSON.stringify(obj);
// excel n
function readWorkbookFromLocalFile(file, callback) {
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
var workbook = XLSX.read(data, { type: 'binary' });
if (callback) callback(workbook);
};
reader.readAsBinaryString(file);
}
// excel
function outputWorkbook(workbook) {
var sheetNames = workbook.SheetNames; //
sheetNames.forEach(name => {
var worksheet = workbook.Sheets[name]; //
for (var key in worksheet) {
// v
console.log(key, key[0] === '!' ? worksheet[key] : worksheet[key].v);
}
});
}
// csv
function csv2table(csv) {
var html = '<table>';
var rows = csv.split('
');
rows.pop(); //
rows.forEach(function (row, idx) {
var columns = row.split(',');
columns.unshift(idx + 1); //
if (idx == 0) { //
html += '<tr>';
for (var i = 0; i < columns.length; i++) {
html += '<th>' + (i == 0 ? '' : String.fromCharCode(65 + i - 1)) + '</th>';
}
html += '</tr>';
}
html += '<tr>';
columns.forEach(function (column) {
html += '<td>' + column + '</td>';
});
html += '</tr>';
});
html += '</table>';
return html;
}
function table2csv(table) {
var csv = [];
$(table).find('tr').each(function () {
var temp = [];
$(this).find('td').each(function () {
temp.push($(this).html());
})
temp.shift(); //
csv.push(temp.join(','));
});
csv.shift();
return csv.join('
');
}
// csv sheet
function csv2sheet(csv) {
var sheet = {}; // sheet
csv = csv.split('
');
csv.forEach(function (row, i) {
row = row.split(',');
if (i == 0) sheet['!ref'] = 'A1:' + String.fromCharCode(65 + row.length - 1) + (csv.length - 1);
row.forEach(function (col, j) {
sheet[String.fromCharCode(65 + j) + (i + 1)] = { v: col };
});
});
return sheet;
}
// 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;
}
/**
* ,
* @param url , blob ,
* @param saveName ,
*/
function openDownloadDialog(url, saveName) {
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url); // 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);
}
function loadRemoteFile(url) {
readWorkbookFromRemoteFile(url, function (workbook) {
readWorkbook(workbook);
});
}
function exportExcel() {
var csv = table2csv($('#result table')[0]);
var sheet = csv2sheet(csv);
var blob = sheet2blob(sheet);
openDownloadDialog(blob, ' .xlsx');
}
function exportSpecialExcel() {
var aoa = [
[' ', null, null, ' '], // 2 null
[' ', ' ', ' ', ' '],
[' ', ' ', 18, new Date()],
[' ', ' ', 22, new Date()]
];
var sheet = XLSX.utils.aoa_to_sheet(aoa);
sheet['!merges'] = [
// A1-C1
{ s: { r: 0, c: 0 }, e: { r: 0, c: 2 } }
];
openDownloadDialog(sheet2blob(sheet), ' .xlsx');
}