我实际上正在使用这个库:https://github.com/SheetJS/js-xlsx。 我用它来创建和下载XLSX文件,该文件从我的网站中提取了一个表。效果确实不错,但是我现在正在尝试做一些更复杂的事情。
我试图同时下载所有表,这意味着下载多个XLSX文件。它确实适用于我的实际代码:
function saveAll(dataAll){
for (let i=0;i<dataAll.length;++i) {
let ws_name = "SheetJS";
let data = dataAll[i];
let wb = new Workbook();
console.log(data);
let ws = sheet_from_array_of_arrays(data.content, null, data.mois, data.annee);
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
let wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: true, type: 'binary'});
saveAs(new Blob([s2ab(wbout)],{type: "application/octet-stream"}), data.prenom_nom + " PVA " + data.mois + " " + data.annee + ".xlsx");
}
}
现在,我想将所有这些xlsx文件下载到一个唯一的ZIP或tar.gz文件中,但是我有点受阻。我尝试使用zip.js库,但没有成功。
我的dataAll参数是对象数组,每个对象都包含.content(它是矩阵)以及在文件名上使用的其他一些参数。
如何才能仅在一个存档中下载所有这些xlsx文件,而不是一个一个地下载它们?
答案 0 :(得分:0)
您可以尝试
var zip = new JSZip();
for(var i=1;i<3;i++)
{
var workbook = XLSX.utils.book_new();
var ws1 = XLSX.utils.table_to_sheet(document.getElementById('tbl'+i));
XLSX.utils.book_append_sheet(workbook, ws1, "Sheet1");
let wbout = XLSX.write(workbook, {bookType: 'xlsx', bookSST: true, type: 'binary'});
zip.file("shubham"+i+".xlsx", wbout, {binary: true});
}
zip.generateAsync({type:"blob"})
.then(function(content) {
// see FileSaver.js
saveAs(content, "example.zip");
});
<!Doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width" , initial-scale=1, shrink>
<meta name="theme-color" content="#000000">
<title>ES6</title>
<script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js"></script>
</head>
<body>
<table id="tbl1">
<tr><td>Name</td><td>Age</td></tr>
<tr><td>Shubham</td><td>22</td></tr>
</table>
<table id="tbl2">
<tr><td>Name</td><td>Age</td></tr>
<tr><td>Shubham</td><td>22</td></tr>
</table>
</body>
<script>
</script>
</html>