本文目录一览:

java js 下载excel的区别

JS那种当然有限制,需要被访问的那个文件夹及文件有访问权限,一般会跟JS文件图片一样作为资源被访问,如果你有很多的文件需要这样下载,那么都需要存放到项目下面的文件夹中。这种会把你项目下的文件结构明显的暴露出来。别人一看就知道你项目下有个什么文件夹,我感觉这样会不安全。IO流的话,可以明显的在后台进行控制,别人无法知道他要访问的文件到底是在项目下的某个文件夹,或者是服务器的硬盘上,或者某些资源存放在数据库中。方便管理,特别是文件很多,而且需要对文件进行一定的管理。因为通过后台控制,相对安全一点吧。个人见解。

前台JS可以一次性批量下载多个Excel表格吗xlsx.full. min

可以。

Js导出Excel的一个工具类,支持一个Excel多个标签页。自动生成文件,只需要在页面构造出Table,然后传递相关参数即可。

js 导出大数据到excel

完整代码:

//导出excelfunction tableToExcel(){

var arrSor = ["sorttable10","sorttable30","sorttable60","sorttable120"]

let str = "";

for (var k = 0; k arrSor.length; k++) {

var tab=document.getElementById(arrSor[k]);

var rows=tab.rows;

const jsonData = [];

for(var i=2;irows.length;i++){ //遍历表格的行

var json = {};

for(var j=0;jrows[i].cells.length;j++){ //遍历每行的列

json[(i+1)+"-"+(j+1)] = rows[i].cells[j].innerHTML;

}

jsonData.push(json);

}

//列标题

let str1 = "trtd align='center' colspan='5'b最大"+arrSor[k].substring(9,arrSor[k].length)+"分钟雨量/b/td/tr";

let str2 = "tr align='center'th站点/thth站名/thth雨量最大值/thth降水时段/thth落入最大降水时段/th/tr";

//循环遍历,每行加入tr标签,每个单元格加td标签

for(let i = 0 ; i jsonData.length ; i++ ){

str2+='tr';

for(let item in jsonData[i]){

//增加/t为了不让表格显示科学计数法或者其他格式

var itemTem= jsonData[i][item];

if (itemTem == "暂无数据") {

str2+=`td colspan='5' align='center'${ itemTem + '/t'}/td`;

}else {

str2+=`td align='center'${ itemTem + '/t'}/td`;

}

}

str2+='/tr';

}

let str3 = "trtd colspan='5'/td/tr";

str += (str1 + str2 + str3);

}

let worksheet = '雨量最大值'

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=""headmeta charset='UTF-8'!--[if gte mso 9]xml

x:ExcelWorkbookx:ExcelWorksheetsx:ExcelWorksheet

x:Name${worksheet}/x:Namex:WorksheetOptionsx:DisplayGridlines//x:WorksheetOptions/x:ExcelWorksheet/x:ExcelWorksheets/x:ExcelWorkbook/xml![endif]--

style type="text/css"

table {border: 1px solid #000000;}

table tr td b {background:#FFFFFF;color:#3D3D3D;font-size:24px;border: 1px solid #000000;}

table th {background:#AEE1FE;color:#3D3D3D;font-size:20px;border: 1px solid #000000;}

table td {background:#FFFFFF;color:#3D3D3D;font-size:20px;border: 1px solid #000000;}/style

/headbodytable${str}/table/body/html`;

//下载模板

// window.location.href = uri + this.base64(template)

var link = document.createElement("a");

link.href = uri + this.base64(template);

link.download = "雨量最大值-" +new Date().format("yyyy年MM月dd日 h时")+ ".xls";

link.style = "visibility:hidden";

document.body.appendChild(link);

link.click();

document.body.removeChild(link);}//输出base64编码function base64 (template) {

return window.btoa(unescape(encodeURIComponent(template))) }

解析:

遍历取出表,顺序是行从上往下,列从左往右,将数据存进数组,下面再拼接成表。

image.png

参考文章:

第一种方法(大量数据导出)

//导出excelfunction tableToExcel() {

var arrSor = ["sorttable10","sorttable30","sorttable60","sorttable120"]

let str = "";

for (var k = 0; k arrSor.length; k++) {

var tab=document.getElementById(arrSor[k]);

var rows=tab.rows;

const jsonData = [];

for(var i=2;irows.length;i++){ //遍历表格的行

var json = {};

for(var j=0;jrows[i].cells.length;j++){ //遍历每行的列

if (rows[i].cells[j].outerHTML.indexOf("rgb(255, 255, 0)") != -1) {

json["yellow"+(i+1)+"-"+(j+1)] = rows[i].cells[j].innerHTML;

}else {

json[(i+1)+"-"+(j+1)] = rows[i].cells[j].innerHTML;

}

}

jsonData.push(json);

}

//列标题

let str1 = "trtd colspan='5' align='center' style='background-color:#FFFFFF;font-size:24px;border: 1px solid #000000;'b最大"

+arrSor[k].substring(9,arrSor[k].length)+"分钟雨量/b/td/tr";

let str2 = "tr" +

"th style='background-color:#AEE1FE;font-size:22px;border: 1px solid #000000;' align='center'站点/th" +

"th style='background-color:#AEE1FE;font-size:22px;border: 1px solid #000000;' align='center'站名/th" +

"th style='background-color:#AEE1FE;font-size:22px;border: 1px solid #000000;' align='center'雨量最大值/th" +

"th style='background-color:#AEE1FE;font-size:22px;border: 1px solid #000000;' align='center'降水时段/th" +

"th style='background-color:#AEE1FE;font-size:22px;border: 1px solid #000000;' align='center'落入最大降水时段/th/tr";

//循环遍历,每行加入tr标签,每个单元格加td标签

for(let i = 0 ; i jsonData.length ; i++ ){

str2+="tr align='center'";

for(let item in jsonData[i]){

if (item.indexOf("yellow") != -1) {//取列数等于3

//增加/t为了不让表格显示科学计数法或者其他格式

var itemTem= jsonData[i][item];

if (itemTem == "暂无数据") {

str2+=`td colspan='5' style='background-color:#FFFF00;font-size:22px;border: 1px solid #000000;' ${ itemTem + '/t'}/td`;

}else {

str2+=`td style='background-color:#FFFF00;font-size:22px;border: 1px solid #000000;' ${ itemTem + '/t'}/td`;

}

}else {

//增加/t为了不让表格显示科学计数法或者其他格式

var itemTem= jsonData[i][item];

if (itemTem == "暂无数据") {

str2+=`td colspan='5' style='background-color:#FFFFFF;font-size:22px;border: 1px solid #000000;' ${ itemTem + '/t'}/td`;

}else {

str2+=`td style='background-color:#FFFFFF;font-size:22px;border: 1px solid #000000;' ${ itemTem + '/t'}/td`;

}

}

}

str2+='/tr';

}

let str3 = "trtd colspan='5' style='background-color:#FFFFFF;border: 1px solid #000000;'/td/tr";

str += (str1 + str2 + str3);

}

var tableHtml="htmlheadmeta charset='UTF-8'/headbodytable"+str+"/body/html"

var excelBlob = new Blob([tableHtml], {type: 'application/vnd.ms-excel'});

var fileName = "雨量最大值-"+new Date().format("yyyy年MM月dd日 h时")+".xls";

if(isIE()){

window.navigator.msSaveOrOpenBlob(excelBlob,fileName);

}else{

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

oa.href = URL.createObjectURL(excelBlob);

oa.download = fileName;

document.body.appendChild(oa);

oa.click();

}} //判断是否IE浏览器function isIE() {

if (!!window.ActiveXObject || "ActiveXObject" in window) {

return true;

} else {

return false;

}}

参考文章: