需要帮助将.docx文件加载到当前文档中

时间:2016-12-22 13:36:45

标签: ms-word office-js

我正在编写一个加载项,用户可以选择加载不同的预定义模板。

我在电脑上将这些模板作为docx文件。

我知道方法body.insertFileAsBase64,但我无法让它工作!

function insertTemplate01() {
    Word.run(function (context) {

        var body = context.document.body;
        body.clear();
        body.insertText("rapport 1", "Start");


        return context.sync();

    });
}

因此,我不想只插入字符串,而是将.docx文件作为模板加载。

我想我需要一个如何做到这一点的婴儿步骤指南。

我不知道如何将docx文件转换为base64,然后使用它们加载到当前文档中。

非常感谢!

1 个答案:

答案 0 :(得分:1)

body.insertFileAsBase64必须适合您的目的。 我假设您遇到了docx文件的base64编码问题。看看这个“愚蠢的故事”示例展示了如何获取base64,然后将其插入到文档中,假设文档在某个URL中可用。

https://github.com/OfficeDev/Word-Add-in-SillyStories/blob/master/sample.js

以下是关于如何从二进制文件获取base64的另一个讨论: Convert binary data to base64 with javascript

要将二进制流转换为base64,您可以执行以下操作:

  function insertPickedFile() {
        var myFile = document.getElementById("FileToPick"); // assuming there is a <input type="file" id="FileToPick"> element, btw this will be the handler for its change event.. so  you also need to initialize a handler like      $('#FileToPick').change(insertPickedFile);
    
        var reader = new FileReader();
        reader.onload = (function (theFile) {
            return function (e) {
               
                Word.run(function (context) {
                    var startIndex = e.target.result.indexOf("base64,"); // when you use the readAsDataURL method the base64 is included in the result, we just need to get that substring, and then insert it using office.js :)
                    var mybase64 = e.target.result.substr(startIndex + 7, e.target.result.length);
                    context.document.body.insertFileFromBase64(mybase64, "replace");
                    return context.sync()       

                })                               
            };
        })(myFile.files[0]);

        // Read in the image file as a data URL.
        reader.readAsDataURL(myFile.files[0]);
    
}