我正在开发一个具有上传演示文稿到web服务器的功能的PowerPoint插件。我有一个100MB大小的演示文稿。我使用了在Office文档中使用GetFileAsync的指南。它适用于小的演示文稿文件。但是当我选择主要的演示文件时,插件消息没有响应。我确实打断了代码,我发现没有响应的原因是由于大型数组切片导致的js。获取大文件的分片是没有问题的。但是当切片数组合并为一个数组时的问题。
以下代码来自发生问题的Office文档。
function onGotAllSlices(docdataSlices) {
var docdata = [];
for (var i = 0; i < docdataSlices.length; i++) {
docdata = docdata.concat(docdataSlices[i]);
}
var fileContent = new String();
for (var j = 0; j < docdata.length; j++) {
fileContent += String.fromCharCode(docdata[j]);
}
// Now all the file content is stored in 'fileContent' variable,
// you can do something with it, such as print, fax...
}我不知道这是错误还是Office外接程序的问题。我希望有人能帮助我。
提前谢谢。
更新:
我像这样简化了给定的函数:
function onGotAllSlices(docdataSlices) {
var fileContent = new String();
for(var i = 0; i < docdataSlices.length; i++) {
var docdata = docdataSlides[i];
for(var j = 0; j < docdata.length; j++) {
fileContent += String.fromCharCode(docdata[j]);
}
}
var base64String = window.btoa(fileContent);
}到目前为止,根本没有“内存不足”的问题。但在base64String中执行fileContent转换时,错误消息'8007000e‘还有另一个问题:’没有足够的存储空间可用来完成此操作‘。
发布于 2017-08-15 17:23:51
这看起来像是性能问题。你选中How to extend an existing JavaScript array with another array, without creating a new array?了吗?.concat将从前面的两个数组中创建一个新的数组,你正在重新分配它。也许有更好的方法来做这件事呢?
https://stackoverflow.com/questions/45668301
复制相似问题