使用office365 javascript API在办公室任务窗口应用程序中的文档的错误bytearray

时间:2016-06-03 15:28:55

标签: office365 office365api office365-apps

在本地计算机上使用Word 2013中的Office 365任务窗口应用程序时,我正在尝试检索当前文档的字节数组。

为了获得字节数组,我使用了here

中的msdn示例

字节数组在第一眼看上去没问题,但在将其转换回文档后,我在尝试在Word中打开文档时收到以下错误消息:

  

我们很抱歉。我们无法打开document.docx,因为我们发现其内容存在问题。   详细信息:文件已损坏,无法打开。

我使用Node服务器进行测试,将同一文档转换为字节数组,并比较数组中的更改,并注意到数组值之间的微小变化。 (see attached image

有没有其他人遇到过这种问题?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

您是否尝试将二进制文件转换为base64?我修改了onGotAllSlices方法将fileContent转换为base64(存储在mybase64变量中),然后我使用this web app将其编码回二进制(基本上保存为docx),我成功地打开了结果文件。

这里是代码(只是添加了最后一行来获取base64 :))

 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]);
        }
       
        // var textFileAsBlob = new Blob(docdataSlices, { type: contentType });


        var mybase64 = window.btoa(fileContent);
        // Now all the file content is stored in 'fileContent' variable,
        // you can do something with it, such as print, fax...
    }

答案 1 :(得分:0)

感谢Juan的回答,我设法找到了解决问题的方法。

由于某些未知原因,office 365 API返回的字节数组不完整,但在将其转换为base64然后再转换为二进制文件后,就可以了。

var onGotAllSlices = function(docdataSlices, callback) {
  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]);
  }
  //convert to base64
  var base64 = window.btoa(fileContent);

  // convert it back to binary
  var binaryString = window.atob(base64);
  var len = binaryString.length;
  var bytes = new Uint8Array(len);
  for (var k = 0; k < len; k++) {
    bytes[k] = binaryString.charCodeAt(k);
  }

  callback(bytes);
};

在回调函数中,现在我可以将字节数组上传到另一台服务器或在本地保存。