我正在尝试生成 Excel 文件,并在用户单击按钮时在浏览器中下载。
var vFullExportContent = getExcelXmlNew(includeHidden, fullPageStore);
这会生成带有 XML 的 Excel 文件数据。
我想使用 Base64 对其进行编码,并使用下面的代码行使用 document.location 下载文件。当我的 Excel 记录超过 1000 行时,这不会生成文件。低于 1000 行就可以了。
document.location='data:application/vnd.ms-excel;base64,' + Base64.encode(vFullExportContent);
而且我还验证了所有(3259 行)数据是否存在任何编码问题,没有观察到任何情况。也就是说,我在应用程序中应用了过滤器来检索千分之一以下的唯一行以及所有三次报告下载。
非常感谢您的帮助。
最佳答案
现在您不再需要 Base64。相反,您可以将 XML 包装在 Blob 中并为用户提供 Object URL下载它。
首先,blob 是二进制数据 block ,而不是 JavaScript 文本,因此我们将您的文本转换为 Uint8Array(您可能需要在浏览器中 polyfill TextEncoder):
var encoder = new TextEncoder('utf8')
var blob = new Blob(encoder.encode(vFullExportContent), {type: "application/xml"})
接下来,生成 URL(这将是一个引用 Blob 的短 URL,而不是数据的表示形式):
var url = URL.createObjectURL(blob)
并显示指向该链接的链接(如果必须的话,可以使用 window.location)。
用户下载文件后,不要忘记调用 URL.revokeObjectURL(blob)
以便对 blob 进行垃圾回收。
关于javascript - document.location 不生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026306/