从Word对话框生成并下载文件

时间:2016-12-06 09:51:50

标签: ms-word office-js

是否有办法生成包含一些JSON内容的文件,并使用saveAs对话框提示用户。

这是来自一个开放的对话框。

对象可能就像(在实践中会相当大)

var obj = {a: 1, b: 2, c: 'qwerty'}

我试图uri编码并使用window.open而没有任何运气。

content = JSON.stringify(obj);
uriContent = "data:application/octet-stream," + encodeURIComponent(content);
newWindow = window.open(uriContent, 'filename');

1 个答案:

答案 0 :(得分:0)

我为XML做了这个,但它需要一些后端和前端工作。在后端,你需要一些像这样的ASPX:

string filename = "export.xml";
byte[] data = Convert.FromBase64String(Request.QueryString[0].Replace("\"", ""));
string decodedString = System.Text.Encoding.UTF8.GetString(data);
// set the http content type to "APPLICATION/OCTET-STREAM
Response.ContentType = "APPLICATION/OCTET-STREAM";
System.String disHeader = "Attachment; Filename=\"" + filename + "\"";
Response.AppendHeader("Content-Disposition", disHeader);
Response.Flush();
Response.Write(decodedString);

我称之为“download.aspx”。然后在前端,你必须使用AJAX。这在页面上创建了一个表单区域,并强制提交表单以开始下载:

// Helper function to load a form and then send the post results to a
// new window so that we can get the download button
function ajax_download(url, data, input_name) {
    try {
        $('#form-div').append("<form method='GET' action='" +
                      url + "' target='_blank'>" +
                      "<input type=hidden name='" + input_name + "' value='" +
                      JSON.stringify(data) + "'/></form>");
        $('#form-div').find('form').submit();
    } catch (err) {
        showNotification("error", err.description);
    }
}

要调用它,只需从您想要的JavaScript代码中进行此调用:

xml = "<xml><data>12345</data></xml>";
ajax_download('./Download.aspx', btoa(xml), 'xml');

在这种情况下,我的目标是XML并始终创建一个名为“export.xml”的文件,但您可以根据需要进行调整。