javascript - 将多个 blob Excel 文件压缩成一个 zip 文件 javascript
问题描述
我实际上正在使用这个库: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 文件下载到一个存档中,而不是一个一个地下载它们?
解决方案
你可以试试这个
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>
推荐阅读
- c# - Selenium chrome 驱动程序以无头打开网站 c#
- c++ - 模板元编程三元值未达到基本情况
- ios - Firebase ServerValue.timestamp() 在 firebase 数据库中不断变化
- javascript - 在滚动条出现之前确定屏幕上可见的表格行数
- javascript - 将包含文件和字符串值的对象附加到 FormData - JS
- visual-studio - 使用 Nsight 进行调试时无法在着色器中插入断点
- ios - 如何在 UITableView 中基于行输入(字母)添加另一个部分 - swift
- gridview - 动态从 Flutter 中的 GridView 中删除项目
- python-3.x - Dlib安装错误?
- oracle - 我如何在 Oracle 中回滚