library(officer)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# create empty Word file
sample_doc <- read_docx()




sample_doc <- sample_doc %>% body_add_par("This is the first paragraph hallo") 
sample_doc <- sample_doc %>% body_add_par("This is the second paragraph")
sample_doc <- sample_doc %>% body_add_par("This is the third paragraph")


# create sample data frame
df <- data.frame(a = 1:10, b = 11:20, c= 21:30)

# add table containing the data frame's contents
sample_doc <- sample_doc %>% body_add_table(df, style = "table_template")

set.seed(0)

# create a temp file
src <- tempfile(fileext = ".png")

# create PNG object
png(filename = src, width = 4, height = 4, units = 'in', res = 400)

# create plot
plot(sample(100, 10))

# save PNG file
dev.off()
## png 
##   2
# add PNG image to Word document
sample_doc <- sample_doc %>% body_add_img(src = src, width = 4, height = 4, style = "centered")

print(sample_doc, target = "sample_file.docx")





sample_data <- read_docx("sample_file.docx")

content <- docx_summary(sample_data)

paragraphs <- content %>% filter(content_type == "paragraph")
paragraphs$text
## [1] "This is the first paragraph hallo" "This is the second paragraph"     
## [3] "This is the third paragraph"       ""
content %>% filter(content_type == "table cell")
##      doc_index content_type     style_name text level num_id row_id is_header
## 1.1          4   table cell table_template    a    NA     NA      1      TRUE
## 1.4          4   table cell table_template    1    NA     NA      2     FALSE
## 1.7          4   table cell table_template    2    NA     NA      3     FALSE
## 1.10         4   table cell table_template    3    NA     NA      4     FALSE
## 1.13         4   table cell table_template    4    NA     NA      5     FALSE
## 1.16         4   table cell table_template    5    NA     NA      6     FALSE
## 1.19         4   table cell table_template    6    NA     NA      7     FALSE
## 1.22         4   table cell table_template    7    NA     NA      8     FALSE
## 1.25         4   table cell table_template    8    NA     NA      9     FALSE
## 1.28         4   table cell table_template    9    NA     NA     10     FALSE
## 1.31         4   table cell table_template   10    NA     NA     11     FALSE
## 2.2          4   table cell table_template    b    NA     NA      1      TRUE
## 2.5          4   table cell table_template   11    NA     NA      2     FALSE
## 2.8          4   table cell table_template   12    NA     NA      3     FALSE
## 2.11         4   table cell table_template   13    NA     NA      4     FALSE
## 2.14         4   table cell table_template   14    NA     NA      5     FALSE
## 2.17         4   table cell table_template   15    NA     NA      6     FALSE
## 2.20         4   table cell table_template   16    NA     NA      7     FALSE
## 2.23         4   table cell table_template   17    NA     NA      8     FALSE
## 2.26         4   table cell table_template   18    NA     NA      9     FALSE
## 2.29         4   table cell table_template   19    NA     NA     10     FALSE
## 2.32         4   table cell table_template   20    NA     NA     11     FALSE
## 3.3          4   table cell table_template    c    NA     NA      1      TRUE
## 3.6          4   table cell table_template   21    NA     NA      2     FALSE
## 3.9          4   table cell table_template   22    NA     NA      3     FALSE
## 3.12         4   table cell table_template   23    NA     NA      4     FALSE
## 3.15         4   table cell table_template   24    NA     NA      5     FALSE
## 3.18         4   table cell table_template   25    NA     NA      6     FALSE
## 3.21         4   table cell table_template   26    NA     NA      7     FALSE
## 3.24         4   table cell table_template   27    NA     NA      8     FALSE
## 3.27         4   table cell table_template   28    NA     NA      9     FALSE
## 3.30         4   table cell table_template   29    NA     NA     10     FALSE
## 3.33         4   table cell table_template   30    NA     NA     11     FALSE
##      cell_id col_span row_span
## 1.1        1        1        1
## 1.4        1        1        1
## 1.7        1        1        1
## 1.10       1        1        1
## 1.13       1        1        1
## 1.16       1        1        1
## 1.19       1        1        1
## 1.22       1        1        1
## 1.25       1        1        1
## 1.28       1        1        1
## 1.31       1        1        1
## 2.2        2        1        1
## 2.5        2        1        1
## 2.8        2        1        1
## 2.11       2        1        1
## 2.14       2        1        1
## 2.17       2        1        1
## 2.20       2        1        1
## 2.23       2        1        1
## 2.26       2        1        1
## 2.29       2        1        1
## 2.32       2        1        1
## 3.3        3        1        1
## 3.6        3        1        1
## 3.9        3        1        1
## 3.12       3        1        1
## 3.15       3        1        1
## 3.18       3        1        1
## 3.21       3        1        1
## 3.24       3        1        1
## 3.27       3        1        1
## 3.30       3        1        1
## 3.33       3        1        1
table_cells <- content %>% filter(content_type == "table cell")
table_data <- table_cells %>% filter(!is_header) %>% select(row_id, cell_id, text)

# split data into individual columns
splits <- split(table_data, table_data$cell_id)
splits <- lapply(splits, function(x) x$text)

# combine columns back together in wide format
table_result <- bind_cols(splits)

# get table headers
cols <- table_cells %>% filter(is_header)
names(table_result) <- cols$text
LS0tDQp0aXRsZTogIm9mZmljZSByIg0KYXV0aG9yOiAiSGVucnkgRG8iDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogZmFsc2UNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICB3b3JkX2RvY3VtZW50czoNCiAgICB0b2M6IHRydWUNCmFsd2F5c19hbGxvd19odG1sOiB0cnVlDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQpgYGB7cn0NCmxpYnJhcnkob2ZmaWNlcikNCmxpYnJhcnkoZHBseXIpDQoNCiMgY3JlYXRlIGVtcHR5IFdvcmQgZmlsZQ0Kc2FtcGxlX2RvYyA8LSByZWFkX2RvY3goKQ0KDQoNCg0KDQpzYW1wbGVfZG9jIDwtIHNhbXBsZV9kb2MgJT4lIGJvZHlfYWRkX3BhcigiVGhpcyBpcyB0aGUgZmlyc3QgcGFyYWdyYXBoIGhhbGxvIikgDQpzYW1wbGVfZG9jIDwtIHNhbXBsZV9kb2MgJT4lIGJvZHlfYWRkX3BhcigiVGhpcyBpcyB0aGUgc2Vjb25kIHBhcmFncmFwaCIpDQpzYW1wbGVfZG9jIDwtIHNhbXBsZV9kb2MgJT4lIGJvZHlfYWRkX3BhcigiVGhpcyBpcyB0aGUgdGhpcmQgcGFyYWdyYXBoIikNCg0KDQojIGNyZWF0ZSBzYW1wbGUgZGF0YSBmcmFtZQ0KZGYgPC0gZGF0YS5mcmFtZShhID0gMToxMCwgYiA9IDExOjIwLCBjPSAyMTozMCkNCg0KIyBhZGQgdGFibGUgY29udGFpbmluZyB0aGUgZGF0YSBmcmFtZSdzIGNvbnRlbnRzDQpzYW1wbGVfZG9jIDwtIHNhbXBsZV9kb2MgJT4lIGJvZHlfYWRkX3RhYmxlKGRmLCBzdHlsZSA9ICJ0YWJsZV90ZW1wbGF0ZSIpDQoNCnNldC5zZWVkKDApDQoNCiMgY3JlYXRlIGEgdGVtcCBmaWxlDQpzcmMgPC0gdGVtcGZpbGUoZmlsZWV4dCA9ICIucG5nIikNCg0KIyBjcmVhdGUgUE5HIG9iamVjdA0KcG5nKGZpbGVuYW1lID0gc3JjLCB3aWR0aCA9IDQsIGhlaWdodCA9IDQsIHVuaXRzID0gJ2luJywgcmVzID0gNDAwKQ0KDQojIGNyZWF0ZSBwbG90DQpwbG90KHNhbXBsZSgxMDAsIDEwKSkNCg0KIyBzYXZlIFBORyBmaWxlDQpkZXYub2ZmKCkNCg0KIyBhZGQgUE5HIGltYWdlIHRvIFdvcmQgZG9jdW1lbnQNCnNhbXBsZV9kb2MgPC0gc2FtcGxlX2RvYyAlPiUgYm9keV9hZGRfaW1nKHNyYyA9IHNyYywgd2lkdGggPSA0LCBoZWlnaHQgPSA0LCBzdHlsZSA9ICJjZW50ZXJlZCIpDQoNCnByaW50KHNhbXBsZV9kb2MsIHRhcmdldCA9ICJzYW1wbGVfZmlsZS5kb2N4IikNCg0KDQoNCg0KDQpzYW1wbGVfZGF0YSA8LSByZWFkX2RvY3goInNhbXBsZV9maWxlLmRvY3giKQ0KDQpjb250ZW50IDwtIGRvY3hfc3VtbWFyeShzYW1wbGVfZGF0YSkNCg0KcGFyYWdyYXBocyA8LSBjb250ZW50ICU+JSBmaWx0ZXIoY29udGVudF90eXBlID09ICJwYXJhZ3JhcGgiKQ0KcGFyYWdyYXBocyR0ZXh0DQoNCg0KDQoNCg0KY29udGVudCAlPiUgZmlsdGVyKGNvbnRlbnRfdHlwZSA9PSAidGFibGUgY2VsbCIpDQoNCg0KDQoNCnRhYmxlX2NlbGxzIDwtIGNvbnRlbnQgJT4lIGZpbHRlcihjb250ZW50X3R5cGUgPT0gInRhYmxlIGNlbGwiKQ0KdGFibGVfZGF0YSA8LSB0YWJsZV9jZWxscyAlPiUgZmlsdGVyKCFpc19oZWFkZXIpICU+JSBzZWxlY3Qocm93X2lkLCBjZWxsX2lkLCB0ZXh0KQ0KDQojIHNwbGl0IGRhdGEgaW50byBpbmRpdmlkdWFsIGNvbHVtbnMNCnNwbGl0cyA8LSBzcGxpdCh0YWJsZV9kYXRhLCB0YWJsZV9kYXRhJGNlbGxfaWQpDQpzcGxpdHMgPC0gbGFwcGx5KHNwbGl0cywgZnVuY3Rpb24oeCkgeCR0ZXh0KQ0KDQojIGNvbWJpbmUgY29sdW1ucyBiYWNrIHRvZ2V0aGVyIGluIHdpZGUgZm9ybWF0DQp0YWJsZV9yZXN1bHQgPC0gYmluZF9jb2xzKHNwbGl0cykNCg0KIyBnZXQgdGFibGUgaGVhZGVycw0KY29scyA8LSB0YWJsZV9jZWxscyAlPiUgZmlsdGVyKGlzX2hlYWRlcikNCm5hbWVzKHRhYmxlX3Jlc3VsdCkgPC0gY29scyR0ZXh0DQpgYGANCg0K