R:可以使用R2wd包在word文件的末尾迭代插入一个表吗?怎么样?

时间:2014-11-28 20:16:03

标签: r ms-word rdcomclient

我有一个使用wdGet(filename="exOut.doc",visible=FALSE)打开的文件。此文件中已包含我使用html和cat(img, file=outputDoc, sep="\n", append=TRUE)插入的图片。

我需要在文档的末尾插入一个表,但是wdTable(format(head(testTable)))将表放在word文档的最顶部。我该如何解决这个问题?

另外,第二个问题:我有很多表需要插入到我的文档中,因此使用循环。下面是演示我的问题的示例代码。这对我来说是非常奇怪的部分:当我逐步执行代码并逐行运行每一行时,它不会产生错误,而且我有一个输出文档。如果我一次运行所有内容,我就无法打开连接错误'。我不明白这是怎么回事。如何一次运行一行产生的结果与一次运行所有完全相同的代码产生不同的结果?

rm(list=ls())

library(R2wd)
library(png)

outputForNow<-"C:\\Users\\dirkh_000\\Downloads\\"
outputDoc<-paste(outputForNow,"exOut.doc",sep="")
setwd(outputForNow)

# Some example plots
for(i in 1:3) 
{ 
  dir.create(file.path(paste("folder",i,sep="")))
  setwd(paste("folder",i,sep="")) # Note that images are all in different folders
  png(paste0("ex", i, ".png"))
  plot(1:5)
  title(paste("plot", i))
  dev.off()
  setwd(outputForNow)
}

setwd(outputForNow)
# Start empty word doc
cat("<body>", file="exOut.doc", sep="\n")

# Retrieve a list of all folders
folders<-dir()[file.info(dir())$isdir]
folders<-folders[!is.na(folders)]

# Cycle through all folders in working directory
for(folder in folders){
  setwd(paste(outputForNow,folder,sep=""))
  # select all png files in working directory
  for(i in list.files(pattern="*.png"))
  {
    temp<-paste0('<img src=','\"',gsub("[\\]","/",folder),"/", i, '\">')
    cat(temp, file=outputDoc, sep="\n", append=TRUE)
    setwd(paste(outputForNow,folder,sep=""))
  }
  setwd(outputForNow)
  cat("</body>", file="exOut.doc", sep="\n", append=TRUE)
  testTable<-as.data.frame(cbind(1,2,3))
  wdGet(filename="exOut.doc",visible=FALSE)
  wdTable(format(head(testTable))) ## This produces a table at the top and not the bottom of the document
  wdSave(outputDoc)
  wdQuit() # NOTE that this means that the document is closed and opened over and over again in the loop otherwise cat() will throw an error
}

上面的代码产生:

Error in file(file, ifelse(append, "a", "w")) : 
  cannot open the connection

有谁能告诉我为什么会发生这种情况以及如何解决这个问题?谢谢,麻烦您了。如果您知道我的方法错误,请推荐一种完全不同的方法,但请解释我做错了什么。

1 个答案:

答案 0 :(得分:0)

要启动DescTools包和Word文档,请使用类似的内容(显然,根据您的路径结构进行了修改):

library(DescTools)
library(RDCOMClient)
report <- GetNewWrd(template = "C:/Users/Rees/Documents/R/win-library/3.0/R2DOCX/templates/TEMPLATE_03.docx")

根据评论添加

在Word中为报表创建模板。也许你称之为TEMPLATE.docx。将其保存在您的文档控制器(或保存Word文档的任何目录中。然后

report <- GetNewWrd(template = " "C:/Users/dirkh_000/Documents/TEMPLATE.docx")

此后,每次创建绘图时,请添加以下行:

WrdPlot(wrd = report)

将绘图插入指定目录中的TEMPLATE.docx Word文档中。

WrdTable(wrd = report)

也是如此