【问题标题】:Header and footer is not binding in word javascript api页眉和页脚在 word javascript api 中没有绑定
【发布时间】:2025-12-04 02:10:02
【问题描述】:

我正在为一个或我们的应用程序开发 Word 插件。使用这个 Word 插件,将保存的 Word 模板从我们的应用程序发送到 Word。

如果我使用包含页眉和页脚的模板,这些不会显示在 Word 文档中。

代码如下:

function setDocumentDataBase64(data) {
    Word.run(function (context) {
            // Create a proxy object for the document body.
            var body = context.document.body;
            //cleaning old context
            //body.clear();
            body.insertFileFromBase64(data, Word.InsertLocation.replace);
            return context.sync().then(function () {
                alert.success("Document inserted");
            });
        })
        .catch(function (error) {
            console.log('Error: ' + JSON.stringify(error));
            if (error instanceof OfficeExtension.Error) {
                console.log('Debug info: ' + JSON.stringify(error.debugInfo));
            }
        });
}

【问题讨论】:

  • 您设法解决了这个问题吗?你有任何可以分享的示例代码吗?我有同样的问题。
  • 是的,我做到了。 gist.github.com/JuaneloJuanelo/61ee8983fc914592b618a9a392d15f44

标签: ms-word office-js


【解决方案1】:

我不确定您在这个问题上所说的“绑定”是什么意思(因为“绑定”在 Office.js 中是一个非常具体的概念)。我猜您正在尝试做的是通过 range.insertFileFromBase64 插入包含页眉/页脚的文档,并且在插入后您看不到页眉和页脚,如果是这种情况,它是设计问题,以及原因,我们不想替换当前文档的页眉/页脚。该方法的目标是重用文档块,而不是替换整个文档。

如果您需要更改标题,则需要手动进行。

您可以探索 createDocument API(实际上是打开一个新文档窗口)处于预览状态,可能是您需要的。

希望这会有所帮助。 谢谢! 胡安。

这是获取当前文档的base64的示例代码:

 function getFile(){
        Office.context.document.getFileAsync(Office.FileType.Compressed, { sliceSize: 4194304  /*64 KB*/ },
          function (result) {
              if (result.status == "succeeded") {
                  // If the getFileAsync call succeeded, then
                  // result.value will return a valid File Object.
                  var myFile = result.value;
                  var sliceCount = myFile.sliceCount;
                  var slicesReceived = 0, gotAllSlices = true, docdataSlices = [];
                  console.log("File size:" + myFile.size + " #Slices: " + sliceCount);

                  // Get the file slices.
                  getSliceAsync(myFile, 0, sliceCount, gotAllSlices, docdataSlices, slicesReceived);
              }
              else {
                  app.showNotification("Error:", result.error.message);
              }
          });

    
    
    }


    function getSliceAsync(file, nextSlice, sliceCount, gotAllSlices, docdataSlices, slicesReceived) {
        file.getSliceAsync(nextSlice, function (sliceResult) {
            if (sliceResult.status == "succeeded") {
                if (!gotAllSlices) { // Failed to get all slices, no need to continue.
                    return;
                }

                // Got one slice, store it in a temporary array.
                // (Or you can do something else, such as
                // send it to a third-party server.)
                docdataSlices[sliceResult.value.index] = sliceResult.value.data;
                if (++slicesReceived == sliceCount) {
                    // All slices have been received.
                    file.closeAsync();
                    onGotAllSlices(docdataSlices);
                }
                else {
                    getSliceAsync(file, ++nextSlice, sliceCount, gotAllSlices, docdataSlices, slicesReceived);
                }
            }
            else {
                gotAllSlices = false;
                file.closeAsync();
                console.log("getSliceAsync Error:", sliceResult.error.message);
            }
        });
    }

    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 mybase64 = window.btoa(fileContent);
        console.log("here is the base 64", mybase64);
        // Now all the file content is stored in 'fileContent' variable,
        // you can do something with it, such as print, fax...
    }

【讨论】:

  • 是的,我也想替换当前文档中的页眉和页脚。
  • 现在我只能替换正文,是否有任何方法可以替换同一文档中的页眉和页脚。
  • 如果您有任何链接或任何对我们有益的示例,我可以在哪里找到 createDocument API。谢谢卡皮尔
  • 你好,我找不到这个 api,你能帮忙吗?
  • 查看此示例(从脚本实验室加载)gist.github.com/JuaneloJuanelo/61ee8983fc914592b618a9a392d15f44 展示了如何在文档中插入标题。