是否有正确的方法从Word桌面客户端中的Javascript Api for Office保存文档?

时间:2016-02-12 16:35:50

标签: javascript ms-word ms-office office-js

上下文

我正在使用JavaScript API for Office(v 1.1)编写Office Word任务窗格地址。

我的系统:

  • Microsoft Windows 8.1
  • Microsoft Visual Studio 2015社区
  • 最新的Office Visual Studio工具
  • Microsoft Office Word Service Pack 1(桌面)

问题

我面临的问题是将打开的文档保存在客户端计算机中。我搜索了相关信息,但仍未成功......

我想知道是否有一种方法可以从JavaScript API中保存Word文档,Office.Context.Document中只有几种方法:

enter image description here

代码

我写了一个解决方案,但我不喜欢通过创建Word.Application Activex来保存文档的方式:

$scope.saveDocument = function (draft) {
    // Draft is a part of the window title
    // Example : 
    // ----------
    // If word window title shows "B0306-000-2012.docx - Word", 
    // draft could be "B0306-000-2012"
    try {
        var Word = new ActiveXObject("Word.Application");
        if (Word) {
            var spanish = Word.Language == 3082;
            var Tasks = Word.Tasks;
            for (var i = 0; i < Tasks.Count; i++) {
                var Task = Tasks.Item(i + 1);
                if (Task.Visible && Task.Name.indexOf(draft) >= 0) {
                    var shell = new ActiveXObject("WScript.Shell");
                    var activated = shell.AppActivate(Task.Name, 2000); //Espera 2 segundos para activar la aplicación
                    shell.SendKeys(spanish ? "^g" : "^s", 3000); //Envía el comando Ctrl + (G / S) según el idioma de la aplicación y espera 3 segundos a que Word guarde el documento
                    break;
                }
            }
            Word.Quit();
        }
        return true;
    } catch (e) {
        $OfficeApp.showModal("No se pudo guardar el documento", "Error: " + e.message);
        return false;
    }
};

问题

有关如何直接使用JavaScript API保存文档的任何建议吗?

2 个答案:

答案 0 :(得分:1)

Office 2013的Office JS API(当前)没有用于打开或保存文档的界面。

我遇到的唯一解决方法是提取OOXML并将其“流”到新文件(文件扩展名为xml)。但是OOXML不包含某些内容(例如文档属性),因此取决于您的文档可能不具备哪些内容。

根据评论中的讨论进行编辑:

除此之外,还需要使用提供完整对象模型功能的旧式VSTO / COM / VBA插件。

答案 1 :(得分:0)

您想要保存的内容似乎是当前的文档,而且Cindy建议这在2013年是不可能的。2016年可以实现。

如果要保存文档的副本(在2103中),则可以执行此操作。请注意,Cindy建议不可能,您可以使用3种格式获取整个文件:压缩(docx),纯文本或PDF,除非用户选择整个文档,否则无法获取XML。 你需要做的是使用getFileAsync()方法(here is a sample)确保要求压缩格式,它将为你提供docx文件的片段,然后你可以在任何需要的地方保存或上传这个文件。 / p>