在R

时间:2018-10-01 01:30:02

标签: r flextable officer

我正在尝试在Word文档的正文中的特定书签上添加弹性表。到目前为止,我发现了以下选项:

  • footers_flextable_at_bkm {flextable}
  • headers_flextable_at_bkm {flextable}
  • body_add_flextable {flextable}

但是他们都没有完全满足我的需求。

我试图编写自己的代码来执行此操作(请参见下文),但它表示未找到docx_str函数。 (我通过headers_flextable_at_bkm函数来处理/修改了此代码)。有没有人可以做到这一点?还是可以添加到flextable包中的功能?

body_flextable_at_bkm <- function(x, bookmark, value){

  stopifnot(inherits(x, "rdocx"), inherits(value, "flextable"))

  str <- docx_str(value, doc = x, align = "center")

  xml_elt <- as_xml_document(x)

  for(doc_obj in x$body){
    if( doc_obj$has_bookmark(bookmark) ){
       doc_obj$cursor_bookmark(bookmark)
       cursor_elt <- doc_obj$get_at_cursor()
       xml_replace(cursor_elt, xml_elt)
    }
  }
}

2 个答案:

答案 0 :(得分:1)

此功能应满足您的需求:

body_flextable_at_bkm <- function(x, bookmark, value){ x <- cursor_bookmark(x, bookmark) x <- body_add_flextable(x = x, value = value, pos = "on") x }

答案 1 :(得分:0)

经过进一步的挖掘,可以找到一种解决方法,在set_curser(x, bookmarkID)命令之前添加body_add_flextable(x, flextable)

为了保持一致性,最好将body_flextable_at_bkm作为flextable软件包的一部分,以便像headers_flextable_at_bkmfooters_flextable_at_bkm命令一样使用它。

编辑:body_flextable_at_bkm命令现在应该可以使用该软件包的最新版本。