RMarkdown 包 flextable 立即失败 "read_docx only support docx"

RMarkdown package flextable fails immediately with "read_docx only support docx"

我很抱歉提出了一个最低限度的问题......没有太多信息,因为我第一次尝试它就失败了,而且我在 RMarkdown 调试方面还不是很熟练。

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

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 有什么限制吗?
或者我们可能会猜测这些限制实际上是针对军官的?
他们能被克服吗?

我不会费心转储 headers 因为你反正没有我的文件。但肯定是最新的 Word 格式,因为我有 Office 365,如果我想的话,几乎无法停止 Windows 更新。
我将尝试自己解压 docx,并检查 docx 的元数据和使用默认值的 Knit 中看到的标准元数据是否有任何差异。

EDIT/UPDATE 2 -- hack 文件失败,并且.....也许无关紧要 所以我确实进行了 zip 转换,使我喜欢的 reference_docx 成为一个文件夹,并将使用“默认”制作的输出 docx 放入一个文件夹中。 我检查了 beyondCompare,也许最大的区别是在我喜欢的尾注中有尾注信息。
我用的是Zotero,所以我实际上是从Word中卸载了Zotero,重新保存,没有任何变化。
我尝试从文档中删除所有尾注并重新保存,但没有任何变化。
我尝试编辑原始文件夹以删除“endnotes.xml”文件,re-zipped它,尝试在 Word 中打开,让它修复,重新保存。 . .没有变化。
我尝试另外删除 top-level xml 中与“尾注”相关的条目,并重新压缩、打开、修复和重新保存......没有变化。

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

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


我是 运行 RStudio 1.3.1073 Windows 10.
我运行的简单代码是:

``` {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 更新

我刚刚试过你的例子并改变了一两件事。我将 post 我的代码放在下面。但是,请注意,您指的包不是 dbplyr,而是 dplyr。第一个用于数据库,后者用于提取、转换和加载。这是代码:

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

data(iris)

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

使用该代码,它可以在我的机器上完美地编织成单词 (.docx)。

omg -- 这是因为我的 reference_docx 的文件路径有 spaces(也许还有其他字符)

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

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

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

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

所以我跳到

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

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

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

==> 错误!

更改为相同长度但没有 spaces...

C:\Zzzzz\yyyy\Qqqqqq\aFolderWithNooSpaces\  

==> 好的 :) !!!

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