officer v0.3.14


Monthly downloads



Manipulation of Microsoft Word and PowerPoint Documents

Access and manipulate 'Microsoft Word' and 'Microsoft PowerPoint' documents from R. The package focuses on tabular and graphical reporting from R; it also provides two functions that let users get document content into data objects. A set of functions lets add and remove images, tables and paragraphs of text in new or existing documents. When working with 'PowerPoint' presentations, slides can be added or removed; shapes inside slides can also be added or removed. When working with 'Word' documents, a cursor can be used to help insert or delete content at a specific location in the document. The package does not require any installation of Microsoft products to be able to write Microsoft files.


officer R package

Make corporate reporting with minimum hassle

R build
status version cranlogs codecov test
coverage Active Lifecycle:

flextable logo. The officer package lets R users manipulate Word (.docx) and PowerPoint (*.pptx) documents. In short, one can add images, tables and text into documents from R. An initial document can be provided; contents, styles and properties of the original document will then be available.

Word documents

The read_docx() function will read an initial Word document (an empty one by default) and lets you modify its content later.

The package provides functions to add R outputs into a Word document:

  • images: produce your plot in png or emf files and add them into the document, as a whole paragraph or inside a paragraph.
  • tables: add data.frames as tables, format is defined by the associated Word table style.
  • text: add text as paragraphs or inside an existing paragraph, format is defined by the associated Word paragraph and text styles.
  • field codes: add Word field codes inside paragraphs. Field codes is an old feature of MS Word to create calculated elements such as tables of contents, automatic numbering and hyperlinks.

In a Word document, one can use cursor functions to reach the beginning or end of a document, or a particular paragraph containing a given text. This cursor concept has been implemented to make the post processing of files easier.

File generation is performed with the print function.

import Word document in a data.frame

The function docx_summary() reads and imports content of a Word document into a data.frame. The function handles paragraphs, tables and section breaks.

PowerPoint documents

The function read_pptx() will read an initial PowerPoint document (an empty one by default) and let you modify its content later.

The package provides functions to add R outputs into existing or new PowerPoint slides:

  • images: produce your plot in png or emf files and add them in a slide.
  • tables: add data.frames as tables, format is defined by the associated PowerPoint table style.
  • text: add text as paragraphs or inside an existing paragraph, format is defined in the corresponding layout of the slide.

In a PowerPoint document, one can set a slide as selected and reach a particular shape (and remove it or add text).

File generation is performed with the print() function.

import PowerPoint document in a data.frame

The pptx_summary() function reads and imports content of a PowerPoint document into a tibble object. The function handles paragraphs, tables and images.


Tables and package flextable

The package flextable brings a full API to produce nice tables and use them with officer. Tables can be written in PowerPoint documents and Word documents. An option is available to render flextables in rmarkdown (HTML and Word outputs).

Vector graphics with package rvg

The package rvg brings an API to produce nice vector graphics that can be embedded in PowerPoint documents or Excel workbooks with officer.

Native office charts with package mschart

The package mschart combined with officer can produce native office charts in PowerPoint and Word documents.


You can get the development version from GitHub:


Or the latest version on CRAN:



Online documentation

The help pages are located at

Getting help

If you have questions about how to use the package, visit Stack Overflow’s officer tag and post your question there. I usually read them and answer when possible.

Contributing to the package

Code of Conduct

Anyone getting involved in this package agrees to our Code of Conduct.

Bug reports

When you file a bug report, please spend some time making it easy for me to follow and reproduce. The more time you spend on making the bug report coherent, the more time I can dedicate to investigate the bug as opposed to the bug report.

Contributing to the package development

A great way to start is to contribute an example or improve the documentation.

If you want to submit a Pull Request to integrate functions of yours, please provide:

  • the new function(s) with code and roxygen tags (with examples)
  • a new section in the appropriate vignette that describes how to use the new function
  • add corresponding tests in directory tests/testthat.

By using rhub (run rhub::check_for_cran()), you will see if everything is ok. When submitted, the PR will be evaluated automatically on travis and appveyor and you will be able to see if something broke.

Functions in officer

Name Description
body_add_blocks add a list of blocks into a document
body_add_break add page break
body_add Add content into a Word document
body_add_docx insert an external docx
block_list Create paragraph blocks
body_end_section_columns add multi columns section
body_end_section_columns_landscape add multi columns section within landscape orientation
block_pour_docx Pour external Word document in the current document
cursor_begin set cursor in an rdocx object
doc_properties read document properties
body_add_gg add ggplot
annotate_base PowerPoint placeholder parameters annotation
block_caption Caption block
add_slide add a slide
add_sheet add a sheet
body_add_toc add table of content
body_add_xml add an xml string as document element
body_replace_all_text Replace text anywhere in the document, or at a cursor
docx_body_relationship body xml document
docx_body_xml body xml document
body_replace_text_at_bkm replace text at a bookmark location
body_add_par add paragraph of text
body_add_fpar add fpar
body_add_table add table
docx_summary get Word content in a data.frame
docx_bookmarks List Word bookmarks
body_end_block_section add any section
body_bookmark add bookmark
block_section New Word section
change_styles Replace Styles in a Word Document
body_end_section_continuous add continuous section
fpar Concatenate formatted text as a paragraph
body_end_section_landscape add landscape section
color_scheme color scheme
fp_border border properties object
layout_summary presentation layouts summary
ftext formatted chunk of text
fp_cell Cell formatting properties
block_table Table block
docx_show_chunk Show underlying text tag structure
body_end_section_portrait add portrait section
docx_reference_img add images into an rdocx object
body_remove remove an element
empty_content create empty blocks
move_slide move a slide
external_img external image
officer-defunct Defunct Functions in Package officer
get_reference_value Get the document being used as a template
ph_slidelink slide link to a placeholder
on_slide change current slide
ph_add_text append text
docx_dim Word page layout
fortify_location eval a location on the current slide
officer officer: Manipulate Microsoft Word and PowerPoint Documents
ph_hyperlink hyperlink a placeholder
fp_par Paragraph formatting properties
body_add_img add image
ph_location_type location of a placeholder based on a type
ph_remove remove a shape
layout_properties slide layout properties
run_linebreak page break for Word
run_columnbreak column break
slip_in_seqfield append seq field
run_pagebreak page break for Word
run_autonum auto number
page_size page size object
pptx_summary get PowerPoint content in a data.frame
print.rpptx write a 'PowerPoint' file.
page_mar page margins object
ph_with add objects into a new shape on the current slide
ph_location create a location for a placeholder
table_stylenames Paragraph styles for columns
table_layout Algorithm for table layout
length.rdocx number of blocks inside an rdocx object
ph_add_par append paragraph
ph_add_fpar append fpar
read_pptx open a connexion to a 'PowerPoint' file
ph_location_right location of a right body element
read_docx Create a 'Word' document object
ph_location_template create a location for a placeholder based on a template
ph_location_fullsize location of a full size element
fp_text Text formatting properties
prop_section section properties
plot_instr Wrap plot instructions for png plotting in Powerpoint or Word
shortcuts shortcuts for formatting properties
slip_in_footnote append a footnote
plot_layout_properties Plot slide layout properties
slip_in_img append an image
slide_size slides width and height
table_width Preferred width for a table
to_html Convert officer objects to HTML
slip_in_text append text
wml_link_images transform an xml string with images references
length.rpptx number of slides
prop_table Table properties
set_doc_properties set document properties
slide_summary get PowerPoint slide content in a data.frame
to_pml Convert officer objects to PresentationML
sheet_select select sheet
slip_in_column_break add a column break
run_reference reference
to_wml Convert officer objects to WordprocessingML
slip_in_xml add a wml string into a Word document
run_seqfield seqfield
styles_info read Word styles
media_extract Extract media from a document object
ph_location_label location of a named placeholder
pack_folder compress a folder
opts_current_table Get table options in a 'knitr' context
ph_location_left location of a left body element
remove_slide remove a slide
read_xlsx open a connexion to an 'Excel' file
table_colwidths Column widths of a table
sanitize_images remove unused media from a document
unordered_list Unordered list
section_columns section columns
table_conditional_formatting Table conditional formatting
unpack_folder Extract files from a zip file
block_toc Table of content
No Results!

Vignettes of officer

No Results!

Last month downloads


Type Package
License GPL-3
LazyData TRUE
Encoding UTF-8
RoxygenNote 7.1.1
VignetteBuilder knitr
NeedsCompilation no
Packaged 2020-09-06 14:40:10 UTC; davidgohel
Repository CRAN
Date/Publication 2020-09-07 12:30:10 UTC

Include our badge in your README