html js转换流,js 怎么样将得到的obj对象变量转化为文档流呢

本文介绍了如何使用tableExport库从HTML数据动态生成Excel文件,包括数据处理、表格构造、浏览器兼容性处理,以及如何利用Base64或Blob进行文件下载。详细展示了关键代码段,适合前端开发者理解和实践数据导出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以看下tableExport中是怎么导出excel文件的,tableExport是从html中到excel,你需要多一步,从data到html的一步

1、将data组合成table(table,tr,td等)字符串

2、将table字符串组合进包含excel文件信息的html字符串片段中

3、如果浏览器支持new Blob,直接将html字符串转换成blob流,然后使用filesave.js下载文件。否则将html字符串转换为base64格式,使用a标签下载文件(数据多的话,a标签可能超出长度,会报错)

部分源码var defaults = {

csvSeparator: ',',

csvEnclosure: '"',

consoleLog: false,

displayTableName: false,

escape: false,

excelstyles: [ 'border-bottom', 'border-top', 'border-left', 'border-right' ],

fileName: 'tableExport',

htmlContent: false,

ignoreColumn: [],

jspdf: { orientation: 'p',

unit:'pt',

format:'a4',

margins: { left: 20, right: 10, top: 10, bottom: 10 },

autotable: { padding: 2,

lineHeight: 12,

fontSize: 8,

tableExport: { onAfterAutotable: null,

onBeforeAutotable: null,

onTable: null

}

}

},

onCellData: null,

outputMode: 'file', // file|string|base64

tbodySelector: 'tr',

theadSelector: 'tr',

tableName: 'myTableName',

type:'csv', //'txt', 'sql', 'json', 'xml', 'excel', 'doc', ---'png', 'pdf'

worksheetName: 'xlsWorksheetName'

};

if(defaults.type == 'excel' || defaults.type == 'doc'){

//console.log($(this).html());

var excel="

if(defaults.displayTableName)

excel +="

" + parseString($('

' + defaults.tableName + '

')) + "";

var excel="

";

excel += '

'

//console.log(excel)

if(defaults.consoleLog === true)

console.log(excel);

var excelFile = "";

excelFile += '';

excelFile += '';

excelFile += "

";

if (defaults.type == 'excel') {

excelFile += "";

}

excelFile += "";

excelFile += "

";

excelFile += excel;

excelFile += "";

excelFile += "";

if(defaults.outputMode == 'string')

return excelFile;

var base64data = base64encode(excelFile);

if(defaults.outputMode == 'base64')

return base64data;

var extension = (defaults.type == 'excel')? 'xls' : 'doc';

try {

var blob = new Blob([excelFile], {type: 'application/vnd.ms-'+defaults.type});

saveAs (blob, defaults.fileName+'.'+extension);

}

catch (e) {

downloadFile(defaults.fileName+'.'+extension, 'data:application/vnd.ms-'+defaults.type+';base64,' + base64data);

}

}

function downloadFile(filename, data){

var DownloadLink = document.createElement('a');

if ( DownloadLink ){

document.body.appendChild(DownloadLink);

DownloadLink.style = 'display: none';

DownloadLink.download = filename;

DownloadLink.href = data;

if ( document.createEvent ){

if ( DownloadEvt == null )

DownloadEvt = document.createEvent('MouseEvents');

DownloadEvt.initEvent('click', true, false);

DownloadLink.dispatchEvent(DownloadEvt);

}

else if ( document.createEventObject )

DownloadLink.fireEvent('onclick');

else if (typeof DownloadLink.onclick == 'function' )

DownloadLink.onclick();

document.body.removeChild(DownloadLink);

}

}

function utf8Encode(string) {

string = string.replace(/\x0d\x0a/g, "\x0a");

var utftext = "";

for (var n = 0; n < string.length; n++) {

var c = string.charCodeAt(n);

if (c < 128) {

utftext += String.fromCharCode(c);

}

else if((c > 127) && (c < 2048)) {

utftext += String.fromCharCode((c >> 6) | 192);

utftext += String.fromCharCode((c & 63) | 128);

}

else {

utftext += String.fromCharCode((c >> 12) | 224);

utftext += String.fromCharCode(((c >> 6) & 63) | 128);

utftext += String.fromCharCode((c & 63) | 128);

}

}

return utftext;

}

function base64encode(input) {

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

var output = "";

var chr1, chr2, chr3, enc1, enc2, enc3, enc4;

var i = 0;

input = utf8Encode(input);

while (i < input.length) {

chr1 = input.charCodeAt(i++);

chr2 = input.charCodeAt(i++);

chr3 = input.charCodeAt(i++);

enc1 = chr1 >> 2;

enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);

enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);

enc4 = chr3 & 63;

if (isNaN(chr2)) {

enc3 = enc4 = 64;

} else if (isNaN(chr3)) {

enc4 = 64;

}

output = output +

keyStr.charAt(enc1) + keyStr.charAt(enc2) +

keyStr.charAt(enc3) + keyStr.charAt(enc4);

}

return output;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值