【问题标题】:RMarkdown package flextable fails immediately with "read_docx only support docx"RMarkdown 软件包 flextable 立即失败,并显示“read_docx only support docx”
【发布时间】:2020-08-31 23:32:07
【问题描述】:

我很抱歉提出了一个最低限度的问题......信息量不是很多,因为它只是在我第一次尝试时失败了,而且我还不太擅长 RMarkdown 调试。

我是第一次尝试 flextable(有兴趣控制 HTML 和 Word 中的表格输出)。

已安装 Flextable,它可以为 HTML 运行,但完全停止对 Word 的任何呈现。当我尝试编织到 Word 时,在我得到一个新的 Word 文件之前,它在 RMarkdown 面板中停止并出现错误,即:


Line [first line of R-chunk]: Error: read_docx only support docx files Execution halted  

以前有没有人看到并解决过这个问题? There is just one SO question potentially related to this here,但还没有答案:(


编辑——我发现了一些东西,但这仍然是个问题:-p
我想到了另一件事是“自定义”...我已经有了自己的 reference_docx。
当我把它拿走以便使用默认的 Word 模板时......它运行了!!
但我绝对想要我的风格! flextable 不是我唯一可以使用的东西:-D。
有人知道对 flextable 的 reference_docx 有什么限制吗?
或者我们可能会猜测这些限制实际上是针对官员的?
能克服吗?

我不会打扰转储标题,因为无论如何你都没有我的文件。但它肯定是最新的 Word 格式,因为我有 Office 365,如果我愿意,几乎无法停止 Windows 更新。
我将尝试自己解压缩 docx,并检查 docx 的元数据与使用默认值的 Knit 中看到的标准元数据是否有任何差异。

EDIT/UPDATE 2 -- 破解文件失败,而且.....也许没关系 所以我确实通过 zip 转换将我首选的 reference_docx 制作为一个文件夹,并将使用“default”制作的输出 docx 制作到一个文件夹中。 我检查了 BeyondCompare,也许最大的区别是我喜欢的尾注中有信息。
我用的是 Zotero,所以我实际上是从 Word 中卸载了 Zotero,重新保存,没有任何变化。
我尝试从文档中删除所有尾注并重新保存,但没有任何变化。
我尝试编辑原始文件夹以删除“endnotes.xml”文件,重新压缩它,尝试在 Word 中打开,让它修复,重新保存。 . .没有变化。
我尝试另外删除与“尾注”相关的顶级 xml 中的条目,并重新压缩并打开并修复并重新保存......没有变化。

所以我接受了也许我只需要重建我喜欢的参考文档样式,并尝试使用 pandoc "default" 的输​​出 docx 重新开始。我确实认为首先将其用作reference_docx 只是为了确保它有效。 . . . . .
它不是 。 :(

  • 所以我们可以看到我的盒子上有一些关于 docx 文件的内容 freetable 或官员根本不会接受参考 docx。

我可能不得不和他们一起提出。
与此同时,我可以查看是否有一个用于“默认”的实际 doc 文件,也许我仍然可以继续进行。


我在 Windows 10 上运行 RStudio 1.3.1073。
我正在运行的简单代码是:

``` {r}

library(dplyr)
library(flextable)

myDF = mtcars 


myDF[1:10,] %>%
      flextable()


```

运行 sessionInfo() 产生:

R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] rstudioapi_0.11  knitr_1.29       magrittr_1.5     tidyselect_1.1.0 munsell_0.5.0    colorspace_1.4-1 R6_2.4.1         rlang_0.4.7     
 [9] dplyr_1.0.2      tools_4.0.2      grid_4.0.2       gtable_0.3.0     xfun_0.16        tinytex_0.25     htmltools_0.5.0  ellipsis_0.3.1  
[17] yaml_2.2.1       digest_0.6.25    tibble_3.0.3     lifecycle_0.2.0  crayon_1.3.4     purrr_0.3.4      ggplot2_3.3.2    vctrs_0.3.2     
[25] glue_1.4.1       evaluate_0.14    rmarkdown_2.3    compiler_4.0.2   pillar_1.4.6     generics_0.0.2   scales_1.1.1     pkgconfig_2.0.3 
> 

只是为了确认~~~只是为了清楚我已经将它隔离为使用 flextable() - 或者可能是 magrittr,但这似乎不太相关 - 这很好:

``` {r }


library(dplyr)
library(flextable)


myDF = datasets::mtcars 


myDF[1:10,] 
  # %>%
  #     flextable()


```  

我已经使用 RMarkdown 几个星期了,之前生成过 docx。
如果我不使用 flextable,我仍然可以生成 docx,包括这个最小的数据转储,只需选择 10 行而不使用 flextable。
当我合并 flextable 时,我们遇到了一个奇怪的问题。

并且只是为了更加清晰,取出 magrittr 我仍然得到相同的行为...... HTML 没问题,Word 出现错误,如所述:

``` {r }


library(dplyr)
library(flextable)


myDF = datasets::mtcars 


flextable(myDF[1:10,])


  # %>%
  #     flextable()


```

回答另一个问题,
是的,我已经尝试更新所有包并检查 RStudio 更新

【问题讨论】:

  • 这不是一个完整的示例:您的 YAML 标头(或文档中的其他地方?)中的某些内容可能会让您感到困惑。在加载这两个包后运行sessionInfo() 可能会提供信息,因此我们可以查看它们是否已过时...
  • 是的...如果您阅读我的编辑,我会说我确实有我自己的 docx 的标题。我也确实运行了 sessionInfo 并将其转储 - 那是在我原来的帖子中。不,没有什么是过时的 :) 我已经尝试更新所有包并寻找 RStudio 更新。如果您阅读了我的整个问题,您会发现我发现这是我自己的 reference_docx 的问题。
  • 添加了实际答案:)
  • 您可以添加sessionInfo()。如果不用officer_0.3.13(github版或者cran新版),能不能更新一下?
  • @DavidGohel 你好~当然,我会更新并再试一次。我确实在更新前看到了 .12

标签: r r-markdown flextable


【解决方案1】:

omg -- 这是因为我的 reference_docx 的文件路径有空格(可能还有其他字符)

我还没有检查其他特殊字符,所以可能是其他字符,但肯定空间足以破坏它。

我的原始文件路径是(部分用相同长度的字母和数字项目编辑)

C:\Zzzzz\yyyy\XxxXxxxx\--------1111,1111 aaaaaaa bbbb cccc\ddd e.f. !\_-_ ggggg hhhhh iiii jjjjjjj kkkkk\R source\_outputTemplates\  

我试着让它变得很短,也很简单,看看这是否是偶然的问题,因为我还没有尝试过,我一直在想......我们知道这是一个本地问题,所以它一定是这样的.

所以我跳到了

C:\Zzzzz\yyyy\Qqqqqq\  
  • 而且有效!

所以为了调试有问题的字符类型,我制作了一个文件夹来玩,并从空格开始...

C:\Zzzzz\yyyy\Qqqqqq\a folder with spaces\  

==> 错误!

更改为相同的长度但没有空格...

C:\Zzzzz\yyyy\Qqqqqq\aFolderWithNooSpaces\  

==> 好的 :) !!!

我可能会检查其他特殊字符,但我认为这已经足够调试了;-)
我相信开发人员可以从这里拿走它。 github说他们遵循标签。

【讨论】:

  • 问题来自官员使用的包裹zip。请从 CRAN 更新已更新的官员和 zip。
  • 您有关于可安装软件包的更多消息吗?
  • 它是(一个同事刚刚在github上做了)。
【解决方案2】:

我刚刚尝试了您的示例并更改了一两件事。我将在下面发布我的代码。但是,请注意,您指的包不是dbplyr,而是dplyr。第一个用于数据库,后者用于提取、转换和加载。代码如下:

library(dplyr)
library(flextable)
library(datasets)

data(iris)

iris[1:10,] %>%
      flextable()

使用该代码,它与我机器上的文字 (.docx) 完美结合。

【讨论】:

  • 抱歉,添加数据集并切换到 dplyr 并没有改变任何东西。它绝对应该工作......这是 flextable() 的一个非常小的例子。有一些我自己不知道如何解决的配置问题。
  • 我很高兴发现 dbplyr/dplyr 错字,这样就不会分心.....我在问题中改变了这一点
  • 您是否仍然收到相同的错误消息?您可以完全重新启动 Rstudio 并重试吗?
  • 我保证,保证,保证它真的与 dbplyr 无关 :) 当我将其简化为最小示例时,这是一个错字。请参阅上面的编辑。另外,我会注意到,如果我没有 dplyr,错误可能是关于 magrittr 而不是 docx
  • 添加了实际答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多