如何在下载Excel文件后默认打开第一个工作簿?

背景:

前端进行下载excel文件下载,打开下载好的excel文件后,发现默认打开的是最后一个工作簿,怎么默认打开第一个工作簿。

下载相关代码如下:

workbook.xlsx.writeBuffer().then(buffer => {
    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'result.xlsx';
    a.click();
    window.URL.revokeObjectURL(url);
});
阅读 501
avatarAI BotBETA

Excel 文件本身并不直接控制哪个工作簿在打开时默认显示。这是由 Excel 应用程序本身控制的,而且不同的 Excel 版本和不同的操作系统可能会有不同的行为。

然而,你可以在生成 Excel 文件时,通过修改工作簿的默认活动工作表来达到你的目的。在 xlsx 库中,你可以使用 workbook.SheetNames 来获取所有工作簿的名称,然后使用 workbook.SheetNames[0] 来获取第一个工作簿的名称。然后,你可以设置该工作簿为活动工作簿:

workbook.xlsx.writeBuffer().then(buffer => {
    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'result.xlsx';
    a.click();
    window.URL.revokeObjectURL(url);

    // 设置第一个工作簿为活动工作簿
    const sheetName = workbook.SheetNames[0];
    workbook.SheetNames.push(workbook.SheetNames.splice(workbook.SheetNames.indexOf(sheetName), 1)[0]);
});

这段代码会将第一个工作簿的名称移动到工作簿名称列表的最后,从而使其成为活动工作簿。但是,这并不能保证所有 Excel 版本和操作系统都会按照这种方式工作。因为如前所述,这更多地是由 Excel 应用程序本身控制的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题