web-dev-qa-db-ja.com

Ruby=でのMicrosoft Word(.docx)ドキュメントの作成

RubyアプリケーションでWordドキュメント(.docx)を作成する簡単な方法はありますか?実際、私の場合は、Linuxサーバーから提供されるRailsアプリケーションです。 。

Prawn に似ていますが、 [〜#〜] docx [〜#〜] の代わりにPDFの代わりに最適です!

45
Javier

前述のように、RubyでOpen XMLドキュメントを操作するためのライブラリは存在しないようですが、 OpenXML Developer にはOpen XMLドキュメントの形式に関する完全なドキュメントがあります。

ユーザーごとにカスタマイズされた標準文書(定型書簡など)のコピーを送信する場合は、DOCXがディレクトリ階層のさまざまな部分を含むZipファイルであるため、非常に簡単です。 allユーザー(実際のコンテンツなし)に送信するすべてのパーツとツリー構造を含むDOCX "テンプレート"を用意し、ユーザー固有を含む新しい部分を作成(または既存の変更)します。必要なコンテンツをZip(DOCXファイル)に挿入してから、ユーザーに送信します。

例:を含むdocument-template.xmlを使用できます[USER-PLACEHOLDER]:。ユーザーがドキュメントを要求したら、[USER-PLACEHOLDER]をユーザーの名前に置き換え、document.xmlyour-template.docx Zipファイルに追加します(これには、必要なすべての画像と他の部分が含まれます) Word文書)を作成し、その結果の文書をユーザーに送信します。

.docxファイルの名前を.Zipに変更する場合、内部のパーツの構造と形式を調べるのは簡単です。 Zip操作ツールを使用して、またはプログラムでコードを使用して、画像やその他のパーツを簡単に削除または置換できます。

生のXMLから完全にカスタムコンテンツを含むまったく新しいWord文書を生成することは、APIにアクセスせずに作業を簡単にすることが非常に困難です。本当にそれが必要な場合は、 Mono をインストールすることを検討してから、VB.NET、C#または IronRuby を使用して Open XML Format SDK 1.Microsoft.Office.DocumentFormat.OpenXml.Packaging Namespace を使用してOpen XMLドキュメントを操作するだけなので、SDKが必要とするすべてをサポートしていると思われるMonoでも問題なく動作するはずです。

41
Grant Wagner

Apache POI を使用できます。 Javaで記述されていますが、 Ruby拡張として)と統合

7
ykaganovich

これは古い質問ですが、新しい答えがあります。 HTMLドキュメントをWord(docx)ドキュメントに変換する場合は、「htmltoword」gemを使用します。

https://github.com/nickfrandsen/htmltoword

なぜ答えがクリープし、誰もがテンプレートソリューションを投稿し始めた理由はわかりませんが、これはOPの質問に答えます。 PDFの代わりにWordを除いて、Prawnと同じです。

UPDATE:

pandoc および docverter というpandocのAPIラッパーもあります。 pandocはhaskellライブラリであるため、どちらもインストールが少し複雑です。

6
Archonic

たぶん、この宝石はあなたにとって興味深いものです。

https://github.com/trade-informatics/caracal/

エビに似ていますが、docxを使用します。

6
Théo Capdet

HTMLドキュメントを拡張子が.docのWordドキュメントとして提供する場合、Wordで正常に開きます。派手なことは何もしないでください。

Edit:以下は、クラシックASPを使用した例です。 http://www.aspdev.org/asp/asp-export-Word/

6
Daniel A. White

これは、Doccy( doccyapp.com )が使用可能なAPIのみを実行する方法です。 docx、odt、およびページをサポートし、必要に応じてPDFも変換します

4
Michael Cindric

開示:私はdocxtemplaterプロジェクトのリーダーです。

Rubyソリューションを探していることは知っていますが、他のすべてのソリューションは、あなたが望むことを正確に行うライブラリを提供せずに、グローバルにそれを行う方法しか教えてくれないため、 JSまたはNodeJS(両方で動作)

DocxTemplater Library

ライブラリのデモ

コマンドラインでも使用できます。

npm install docxtemplater -g

docxtemplater <configFile>

----config.docxFile: The input file in docx format
----config.outputFile: The outputfile of the document
3
edi9999

Grant Wagnerが提案した手法と非常によく似た手法を使用して、Ruby htmlをWord gemに作成しました。これにより、Ruby = app。 http://github.com/nickfrandsen/htmltoword で確認できます-単にHTML文字列を渡すだけで、対応するWord docxファイルが作成されます。

def show
  respond_to do |format|
    format.docx do
      file = Htmltoword::Document.create params[:docx_html_source], "file_name.docx"
      send_file file.path, :disposition => "attachment"
    end
  end
end

それがあなたの役に立つことを願っています。問題がある場合は、githubの問題を開いてください。

3
Nick

Grantの答えに加えて、Wordに「フラットOPC」ファイルを送信することもできます。このファイルは、基本的にdocxを解凍して連結し、単一のxmlファイルを作成します。この方法で、1つのファイルの[USER-PLACEHOLDER]を置き換えて、それで完了できます(つまり、zip圧縮またはunzip圧縮しない)。

2
JasonPlutext

まだこれを見ている人は、この投稿でXMLデータソースの使用方法を説明しています。これは私にとってうまく機能します。

http://seroter.wordpress.com/2009/12/23/populating-Word-2007-templates-through-open-xml/

2
Amala

もちろん、Windowsで実行している場合は、WIN32OLEの問題であり、Word COMオブジェクトに多少の苦労があります。

ただし、* nix環境から提供する可能性があります。 Word 2007は、「 Microsoft Office Open XML 」形式(* .docx)を使用します。この形式は、適切な Microsoftの互換性パック を使用して開くことができます。

最近のOfficeアプリの一部(少なくとも2002/XPおよび2003)には 独自のXML形式 があり、これも使用可能です。

残念ながら、プロセスを簡単にするためのツールはありませんRuby.

受け入れられるようになれば、renamed-htmlファイルルートをたどりたいと思います。 WordXPから文書をHTMLとして保存し、.docに名前を変更して問題なく開きました。

1
Mike Woodhouse

このgithubリポジトリを確認してください: https://github.com/jawspeak/Ruby-docx-templater

Wordテンプレートからドキュメントを作成できます。

1
Kieran Andrews

同じ問題が発生しました。残念ながら、クライアントはテンプレートを入力する必要があるため、xmlを操作できませんでした。また、これを行うことは常に可能とは限りません(たとえば、Macのオフィスではこれが許可されていません)。

この問題の解決策として、組み込みのRubyでrtfドキュメントテンプレートとして使用できる単純なgemを作成しました: https://github.com/eicca/rtf-templater

私はそれをテストしましたが、レポートやドキュメントを埋めるのに大丈夫です。ただし、複雑なループと条件の場合、書式設定が正しく表示されません。

0
Mik