我想创建一个 Excel 文件(在.xlsx格式中)并使用客户端 JavaScript使其可供下载。我能够使用js-xlsx库创建示例文件。但我无法应用任何样式。至少需要一些基本的样式,包括标题的背景颜色,标题的粗字体和单元格的文本换行。
js-xlsx库文档说我们可以使用Cell Object提供样式。
我尝试使用单元格对象给出样式,但它没有反映在下载的 .xlsx 文件中。我甚至尝试读取 .xlsx 文件并使用XLSX.write()函数将同一文件写回。但它返回了一个没有任何样式的 Excel 文件。理想情况下,我希望下载的文件具有上传文件的相同样式。重新创建的文件中没有应用字体颜色或背景颜色。我使用Excel 2013测试下载的文件。
请参见以下 Excel 截图,上传前和上传后。 原始文件
下载的文件
代码如下。
我尝试使用单元格对象给出样式,但它没有反映在下载的 .xlsx 文件中。我甚至尝试读取 .xlsx 文件并使用XLSX.write()函数将同一文件写回。但它返回了一个没有任何样式的 Excel 文件。理想情况下,我希望下载的文件具有上传文件的相同样式。重新创建的文件中没有应用字体颜色或背景颜色。我使用Excel 2013测试下载的文件。
请参见以下 Excel 截图,上传前和上传后。 原始文件
![enter image description here](https://istack.dev59.com/GwK2s.webp)
![enter image description here](https://istack.dev59.com/tBAuM.webp)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<script type="text/javascript" src="xlsx.core.min.js"></script>
<script type="text/javascript" src="Blob.js"></script>
<script type="text/javascript" src="FileSaver.js"></script>
<script>
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;
}
/* set up XMLHttpRequest */
var url = "template-sample.xlsx";
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";
oReq.onload = function(e) {
var arraybuffer = oReq.response;
/* convert data to binary string */
var data = new Uint8Array(arraybuffer);
var arr = new Array();
for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
var bstr = arr.join("");
/* Call XLSX */
var workbook = XLSX.read(bstr, {type:"binary", cellStyles:true});
console.log("read workbook");
console.log(workbook);
/* DO SOMETHING WITH workbook HERE */
var wbout = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary', cellStyles: true});
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), "template-download.xlsx");
}
function read(){
oReq.send();
}
</script>
</head>
<body>
<button onclick="read()">save xlsx</button>
</body></html>
示例代码来自这里。
我期待的是使用js-xlsx库或提供此功能的其他库来为单元格提供样式选项。我找到了一个名为exceljs的库,但需要支持node js。我正在寻找一种完全基于客户端的解决方案。这将用于基于Cordova的平板电脑和桌面应用程序。