2

语境

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

我的系统:

  • 微软视窗 8.1
  • Microsoft Visual Studio 2015 社区
  • 适用于 Office 的最新 Visual Studio 工具
  • Microsoft Office Word Service Pack 1(桌面)

问题

我面临的问题是将打开的文档保存在客户端机器中。我已经搜索了信息,但仍然没有成功...

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

在此处输入图像描述


代码

我写了一个解决方案,但我不喜欢通过创建 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 保存文档的任何建议?

4

2 回答 2

1

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

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

从评论中的讨论编辑:

对于其他任何事情,都必须使用提供完整对象模型功能的旧式 VSTO/COM/VBA 插件。

于 2016-02-12T17:43:27.160 回答
0

看来您要保存的是当前文档,正如 Cindy 建议的那样,这在 2013 年是不可能的。在 2016 年以上是可能的。

如果您想保存文档的副本(在 2103 中),您可以这样做。请注意,Cindy 的建议是不可能的,您可以获得 3 种格式的整个文件:压缩 (docx)、纯文本或 PDF,除非用户选择整个文档,否则您无法获得 XML。您需要做的是使用 getFileAsync() 方法(这里是一个示例) ,确保要求提供可以为您提供 docx 文件切片的压缩格式,然后您可以在任何需要的地方保存或上传该文件。

于 2016-02-18T21:05:04.117 回答