javascript - 如何通过 Javascript 设置 xlsx 文件的计算模式?
问题描述
我有一个导入 Excel 工作簿 (xlsx) 文件、编辑单元格值并最终将工作簿保存在不同文件中的小代码。
我的代码的问题是:在新的 xlsx 中,没有设置自动计算。我必须手动打开文件并通过所有带有公式的单元格才能更新它。
我在 SheetJs 的 Github 中遇到了这个问题报告,但没有找到解决方案: https ://github.com/SheetJS/sheetjs/issues/306
我的问题是:如何在生成的 xlsx 上将计算模式设置为自动?
以下是代码片段:
/* I use an input button (type="file", id="xlf") to get the file */
$('#xlf').change(function(e)
{
var reader = new FileReader();
reader.readAsArrayBuffer(e.target.files[0]);
reader.onload = function(e)
{
var data = new Uint8Array(reader.result);
var wb = XLSX.read(data,{type:'array'});
var htmlstr = XLSX.write(wb,{type:'binary',bookType:'html'});
var fSN = wb.SheetNames[0];
var ws = wb.Sheets[fSN];
/* simple formula added for test purposes */
ws['D9'] = {t:'n', f:"E4+E5"};
if(!ws["E5"]) ws["E5"] = {};
ws["E5"].t = "n";
ws["E5"].v = $("#diff").val();
ws["E4"].t = "n";
/* save file */
XLSX.writeFile(wb, "test.xlsx");
}
});
此代码使我的浏览器下载一个新的 excel,其中单元格的值E5
是从字段中获取的值#diff
。D9
在我手动点击它并按回车之前一直保持空白(公式在那里)。
理想情况下,我正在寻找一个不涉及node.js
或npm
因为程序将在我无法安装任何东西的计算机上运行的解决方案。
解决方案
以防万一有人遇到我遇到的同样问题:Excel 没有计算公式结果的原因是我必须启用编辑。事实上,由于文件是从网页下载的,这些都被自动禁用了。简单地启用编辑解决了我的问题 - 在重新下载文件时也是如此,因为它保持相同的名称。
但是,由于我在这方面花了一些时间并且有人会发现它很有用,如果您像我一样使用SheetJs
(https://unpkg.com/xlsx@0.16.9/dist/xlsx.full.min.js)来操作带js的excel,默认计算设置写在var op
.
推荐阅读
- python - 等待 asyncio.Future 引发 concurrent.futures._base.CancelledError 而不是等待设置值/异常
- spring - 表单:复选框在 Spring MVC JSP 页面中不起作用
- java - Spring security Oauth2 为每个浏览器点击设置不同的令牌
- android - 无法在 Android Auto 消息应用程序中显示通知
- php - 无法使用 symfony 路由让路由在 php 应用程序中工作
- c# - 创建_layouts父亲和孩子
- python - 在 Django 中模拟模型字段验证器
- python - 如何在 django restframework 中设置视图
- mule - 对于这种情况,如何在 Anypoint 工作室中使用“选择路由器”?
- c# - Cannot access asp .net core app when run with docker on local machine, or to kubernetes