【问题标题】:Using JavaScript to "Create" a Microsoft Word Document使用 JavaScript “创建” Microsoft Word 文档
【发布时间】:2011-07-21 17:05:54
【问题描述】:

我想使用 JavaScript 动态创建一个文档,然后在 Microsoft Word 中打开该文档。这可能吗?这是我当前的代码:

<html>
  <head>
      <title></title>

       <script src="js/jquery-1.4.4.js" type="text/javascript"></script>
  </head>
  <body>

  <div id="myDiv">The quick brown fox jumped lazly over the dead log.</div>

  <script type="text/jscript">
     var printWindow = window.open("", "Print", "width=800,height=400,scrollbar=0");
     var printAreaHtml = $("#myDiv").attr("outerHTML");

     printWindow.document.open("text/html", "replace");
     printWindow.document.writeln("<html><head>")
     printWindow.document.writeln("<meta HTTP-EQUIV='Content-Type'  content='application/vnd.ms-word'>");
     printWindow.document.writeln("<meta HTTP-EQUIV='Content-Disposition' content='attachment;filename=print.doc'>");
     printWindow.document.writeln("</head>");
     printWindow.document.writeln("<body>");
     printWindow.document.write(printAreaHtml);

     printWindow.document.writeln("</body>");
     printWindow.document.writeln("</html>");
     printWindow.document.close();

     //    printWindow.print();     

  </script>

  </body>
</html>

【问题讨论】:

  • 你想达到什么目的?
  • 理论上您可以创建正确的二进制数据并以可以正确保存的方式显示它,但是这通常是在服务器端完成的,以便可以执行正确的 mime 类型和数据转换。

标签: javascript jquery


【解决方案1】:

我不确定您在上面的代码中究竟想做什么,但这里有一些关于访问文档中的 word 文档和表格的信息:

  1. Microsoft Word 对象模型

    此对象模型是 Microsoft Word(不是 Javascript)的一部分,它可以让您从其他程序(不仅仅是网页,而是任何计算机程序)远程“自动化”单词。

    它主要是为 Visual Basic 设计的,但可以通过 Javascript 从网页访问 - 请参阅下面的第 2 段。

    但是,通过 Javascript 使用起来有点棘手,特别是因为您不能使用视觉基本常量 - 您需要按值引用它们。如果你进一步研究这个,你很快就会明白我的意思。

    那么您在哪里可以找到有关此对象模型的信息?

    如果您在 Word 帮助文件中查找,这些内容都在其中。

    如果您查看 Word 帮助,在编程信息下,您会找到 Microsoft Word Visual Basic 编程参考。

    Word 对象模型,可让您执行解决问题所需的操作,例如:

    • 打开Word
    • 在 Word 中打开文档
    • 访问该 ActiveDocument 中的表集合。
    • 访问给定表格的行和单元格。
  2. 你如何通过 Javascript 访问它?

    我认为这可能只能通过 Internet Explorer(也可能是 Opera)来完成。

    这里你需要了解一下ActiveXObjects。

    ActiveXObjects(如果你不知道的话)是独立的计算机程序,可以启用附加功能。互联网上有很多 ActiveX 对象。

    当您安装 Word 时,这还会安装一个 ActiveX 对象来自动执行 Word,让您可以访问 Word 对象模型。

    所以在 javascript 中,让我们打开一个新的 word 实例:

    var oApplication=new ActiveXObject("Word.Application");
    oApplication.Visible=true; // "Visible" is in the Word Object Model`
    

    你有它。

    如果你想打开你的文件并获取表格:

    oApplication.Documents.Open("myfilename");
    var oDocument=oApplication.ActiveDocument;
    var oTable=oDocument.Tables(1);`
    

现在我把它留给你继续处理剩下的事情。

【讨论】:

    【解决方案2】:

    编辑:在提出问题时这是不可能的,但在 2017 年是这样。查看 jrm 评论中的链接 - http://www.effectiveui.com/blog/2015/02/23/generating-a-downloadable-word-document-in-the-browser/

    浏览器对 Javascript 设置了一些严格的限制,这将阻止您创建可下载的文件。请参阅此相关问题:

    Create a file in memory for user to download, not through server

    【讨论】:

    • 您链接的问题实际上表明可以从浏览器下载文件而无需通过数据uris访问服务器。虽然在 2010 年回答时浏览器支持可能会更差一些,但即便如此。问题不在于下载文件,而是在不使用 ActiveX 的情况下生成它。
    • 有可能。一个人在这里解释了如何做到这一点。 effectiveui.com/blog/2015/02/23/…
    【解决方案3】:

    我不相信这个想法会奏效。您需要使用服务器端语言创建 Word 文件。例如 PHP:http://www.webcheatsheet.com/php/create_word_excel_csv_files_with_php.php

    【讨论】:

      【解决方案4】:

      您无法使用客户端进行此操作。主要是您需要发送标头而不是 html。因此,我建议您按照 Max 的建议使用服务器端脚本,如果您使用 Apache 服务器也将这些文件命名为 .doc,则最好使用 .htaccess 文件。

      假设您的 php 文件需要创建一个带有一些传递参数的 .doc 文件,比如说 id。因此,您希望 file_.doc 指向 file.php?id=,请尝试使用以下重写规则,以便浏览器也可以通过扩展名理解 RewriteRule file_(.*).doc file.php?id=$1

      【讨论】:

        【解决方案5】:

        如果您需要服务器端文档生成并且服务器正在运行 Java,请查看以下内容: https://github.com/leonardoanalista/java2word/

        【讨论】:

          【解决方案6】:

          有时我们不能使用服务器端应用程序或activeX来创建办公文档,因为phonegap移动应用程序只使用客户端javascipt来操作。 我现在发现的唯一方法是使用 word 二进制文件格式或 OOXML

          http://msdn.microsoft.com/en-us/library/hh643138(v=office.12)

          有人说创建 RTF 文件要容易得多,我同意他们的看法。

          【讨论】:

            【解决方案7】:

            这是绝对可能的。 Googoose 是我编写的一个 jQuery 插件,用于处理许多更复杂的转换。它仍然是相当新的,但似乎还有其他一些尝试,所以你可以检查一下。这是迄今为止我找到的最好的文档,它实际上解释了这个过程http://sebsauvage.net/wiki/doku.php?id=word_document_generation。如果您有兴趣,请查看 Googoose 中的示例。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多