返回
如何解决 Excel 下载后公式无法自动计算的难题?
javascript
2024-03-07 16:41:41
Excel 下载后公式无法计算的难题
遭遇问题
相信不少人都有这样的经历:辛辛苦苦用 ExcelJS 创建了一个 Excel 文件,下载后打开时,却发现其中的公式无法自动计算,需要手动点击“启用编辑”后才能重新计算。这令人十分困扰,因为它影响了 Excel 文件的便捷性和自动化程度。
根源探究
为什么会出现这种现象?经过分析,我们发现,这是因为 Excel 默认会在下载时将其标记为只读。当文件处于只读状态时,其中的公式就会被禁用,无法自动计算。
解决方案出炉
为了解决这一问题,我们需要在导出 Excel 文件之前,手动更改工作表的计算属性,使其在加载时进行完全计算。在 ExcelJS 中,我们可以通过以下代码来实现:
workbook.calcProperties.fullCalcOnLoad = true;
完整方案
现在,我们提供一份完整的解决方案,帮助你解决 Excel 下载后公式无法计算的问题:
const handlePrintExcel = async () => {
try {
const response = await fetch("/test.xlsx");
if (!response.ok) {
console.log("Network response error");
}
const blob = await response.blob();
// Read the Blob using ExcelJS
const workbook = new ExcelJS.Workbook();
workbook.xlsx
.load(blob)
.then(async (wb) => {
const worksheet = workbook.getWorksheet("Sheet1");
const cell_f8 = worksheet.getCell("A1");
cell_f8.value = 123;
const cell_a2 = worksheet.getCell("A2");
cell_a2.value = 123;
workbook.properties.readOnlyRecommended = false;
workbook.properties.date1904 = false;
workbook.security = {
lockWindows: false,
lockStructure: false,
workbookPassword: null,
workbookAlgorithmName: null,
workbookHashValue: null,
};
// 设置工作表的计算属性,使其在加载时进行完全计算
workbook.calcProperties.fullCalcOnLoad = true;
// Write the changes to a buffer
const buffer = await workbook.xlsx.writeBuffer();
return buffer;
})
.then((data) => {
// Create a new Blob with the updated data
const updatedBlob = new Blob([data], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
});
// Create a URL for the Blob
const url = window.URL.createObjectURL(updatedBlob);
// Create an anchor element to trigger the download
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = `Test.xlsx`;
// Trigger the download
anchor.click();
// Revoke the URL to release resources
window.URL.revokeObjectURL(url);
})
.catch((error) => {
console.error("Error processing Excel file: ", error);
});
} catch (error) {
console.error("Error converting Excel file into Blob:", error);
}
};
通过以上修改,下载的 Excel 文件中的公式将在打开时自动重新计算,无需手动点击“启用编辑”。
常见问题解答
- 为什么 Excel 会默认将下载的文件标记为只读?
为了保护文件安全,防止未经授权的修改。 - 除了使用 ExcelJS 库,还有其他方法可以解决这个问题吗?
可以,你可以在文件保存时使用 SaveAs 选项,并选择将文件另存为可编辑格式。 - 如果我将 Excel 文件发送给其他人,他们也会遇到同样的问题吗?
是的,除非你手动更改了工作表的计算属性。 - 我是否可以将工作表的计算属性设置为自动重新计算,即使文件被标记为只读?
不行,只读属性会覆盖计算属性的设置。 - 如果我使用的是其他编程语言,如何实现相同的解决方案?
每个编程语言都有自己的 API 来处理 Excel 文件,你需要查阅相关的文档以获取具体方法。
总结
Excel 下载后公式无法计算是一个常见问题,原因是 Excel 默认将下载的文件标记为只读。通过手动更改工作表的计算属性,使其在加载时进行完全计算,我们可以解决这个问题,确保公式在下载后能够自动计算。