You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

knitr生成含图片flextable失败但RMarkdown代码块运行正常

报错根因

该xmlParseEntityRef: no name报错是officedown渲染flextable生成docx文档时,OXML(Office Open XML)格式解析失败导致的,触发原因集中在以下三点:

  • 交互式运行代码和knitr编织的工作目录不一致,手动拼接getwd()生成的图片路径存在&、中文、空格等特殊字符,触发xml转义异常
  • compose函数内插入了无意义的空文本chunk,生成了不合法的xml节点
  • 配置的docx模板路径缺少.docx后缀,officedown读取模板时抛出隐性格式错误
解决方案

按以下步骤修改即可正常编织:

  1. 修正yaml配置的模板路径,补全文件后缀
  2. 代码中使用knitr::fig_path()生成编织上下文下的合法图片路径,避免手动管理工作目录和文件名
  3. 删掉compose内冗余的空文本chunk参数
  4. 显式设置flextable默认配置适配docx输出

修正后yaml示例

---
title: "something: `r params$program`"
output:
  officedown::rdocx_document: 
    reference_docx: "P:/Reference_doc.docx"
params:
  program: "something"
---

修正后代码块示例

```{r overall1_flextable}
library(flextable)
# 显式设置flextable适配docx输出的默认配置
set_flextable_defaults()

# 生成图表
plot_overall1 <- f_overall_cht(overall_chart1)
# 调用knitr内置方法生成合法临时图片路径
img_path <- knitr::fig_path(prefix = "plotoverall1", suffix = ".png")
ggsave(filename = img_path, plot = plot_overall1, width = 3.05, height = 0.37, dpi = 600, device = "png")

example_tibble <- tibble(
  col_name = "chart to the right",
  chart = ""
)

ft <- flextable(example_tibble)

ft <- compose(ft, i=1, j=2,
              value = as_paragraph(
                as_image(src = img_path, width = 3.05, height = 0.37)
              ),
              part = "body"
              )

autofit(ft)
如果修改后仍报错,可将flextable、officedown、officer三个包更新到适配R4.1.2的最新CRAN版本即可。

内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:54:03