OpenxmlDocxTemplater
OpenxmlDocxTempleter allows you to embed ruby code in MS Office documents (.docx files). You provide .docx template with ruby code, inside a special markup, and the data. In this way gem generates the document. It must be familiar to you, if you know erb!
Installation
Add this line to your application's Gemfile:
gem 'openxml_docx_templater'
And then execute:
$ bundle
Or install it yourself as:
$ gem install openxml_docx_templater
Usage
OpenxmlDocxTemplater is the best to demonstrate with an example. At the picture shown below, you can see the MS Word template with ruby code (this template, the output file, and the sample script can be found in examples directory).
This image is a screenshot of example_template.docx from the examples directory. It is a regular Microsoft Office document with ruby code, embedded inside a special markup. That ruby code drives the document creation. You can use conditions, loops, blocks — in fact, the whole ruby language. And you can apply any MS Office formatting to the outputted variables or static text.
The second line in the template is {%= @title1 %}
. That means output the value of variable title1
. This variable will be replaced in the generated document, but it will still be bold.
You can take that template, provide the data and generate the final document:
require 'openxml_docx_templater'
class Example
include OpenxmlDocxTemplater::Generator
Brand = Struct.new(:name, :models)
Model = Struct.new(:name, :description, :cost)
def generate
@is_usa = true
@title1 = "Price"
@title2 = "Прайс"
lg_models = [Model.new('Google Nexus 5x', 'LG Nexus 5x was released in November 2015.', '$550'),
Model.new('Google Nexus 5', 'LG Nexus 5 was released in November 2013.', '$350'),
Model.new('Google Nexus 6p', 'LG nexus 6p was released in November 2015.', '$750'),
]
lg = Brand.new("LG", lg_models)
iphone_models = [Model.new('iPhone 6+', 'iPhone 6+ was released in September 2014.', '$1000'),
Model.new('iPhone 6', 'iPhone 6 was released in September 2014.', '$700')]
iphone = Brand.new("iPhone", iphone_models)
@brands = [lg, iphone]
render_msword 'example_template.docx'
end
end
The key parts are include OpenxmlDocxTemplater::Generator
and render_msword
. The data for the template must be provided as instance variables.
Following picture shows the generated document. It is a screenshot of the example_template_output.docx document from the examples directory.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
License
The gem is available as open source under the terms of the MIT License.