新版本officer与flextable中如何访问并修改flextable的XML?
新版flextable访问/操作XML的方法
在新版flextable和officer包中,原内部函数docx_str.flextable已被移除,可通过以下方式实现表格XML的自定义操作:
生成表格原始XML字符串:使用
flextable::gen_raw_xml()替代旧方法,该函数可直接将flextable对象转换为对应Word格式的XML字符串。
示例代码:library(flextable) library(officer) library(stringr) # 创建示例表格 ft <- flextable(head(mtcars)) # 生成XML字符串 xml_table <- gen_raw_xml(ft, type = "docx")自定义修改XML内容:用字符串处理工具(如
stringr包)对XML进行规则替换,比如调整行高规则:xml_table_modified <- str_replace_all( xml_table, 'w:hRule="exact"', 'w:hRule="atLeast"' )插入修改后的XML到文档:依旧使用
officer::body_add_xml()将修改后的XML插入docx文档:doc <- read_docx() doc <- body_add_xml(doc, str = xml_table_modified, pos = "after") print(doc, target = "custom_table.docx")
如果需要更精细的节点级操作,可借助xml2包解析XML为对象后修改,再转回字符串:
library(xml2) # 解析XML为可操作对象 xml_doc <- read_xml(xml_table) # 定位并修改目标节点属性 xml_find_all(xml_doc, "//w:trPr/w:hRule") %>% xml_set_attr("w:val", "atLeast") # 转回字符串格式 xml_table_modified <- as.character(xml_doc)
内容的提问来源于stack exchange,提问作者TobiSonne
相关产品推荐
相关产品推荐

