如何与Python的OpenPyxl一起使用R的Reticulate包在Excel中隐藏行

时间:2019-11-21 19:41:13

标签: python r excel openpyxl reticulate

我正在尝试创建具有隐藏/折叠行的excel文件,例如openpyxl webpage上,但是通过R中的reticulate包。目前,我可以从生成虚拟数据到保存文件,再到处理我的工作表的row_dimensions,过程中的所有操作都需要进行。我之所以走这条路,是因为R的excel编写程序包,至少从我发现的程序包中,都无法折叠行。 下面的代码代表了当前的形式,尽管它不改变行的尺寸,但能够输出到有效的excel文件。

rc1<-letters
rc2<-seq(1,1040,40)
rc3<-seq(0,18199,700)
rc<-data.frame(rc1,rc2,rc3)
library(reticulate)
pyxl<-import("openpyxl")
rct<-pyxl$Workbook()
pcta<-rct$active
pcta$title<-"Trial"
library(magrittr)
for (i in 1:length(rc1)) {
  for (j in 1:length(rc)) {
    a<-rc[i,j]
    a %>% pcta$cell(i,j,.)
  }
}
pcta$row_dimensions[1:4]<-10
rct$save("trial.xlsx")

我还尝试仅将单个值赋值,然后在将以上代码中的1:4替换为1"1"时引起跟随错误。

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  TypeError: 'float' object is not iterable 
 Error in py_call_impl(callable, dots$args, dots$keywords) : 
  TypeError: '<' not supported between instances of 'str' and 'int' 

1 个答案:

答案 0 :(得分:0)

一个小时后才发布我自己的问题的答案有些尴尬,但是我认为我将发布它的目的是为其他可能试图解决类似问题的人提供帮助。首先,需要在as.integer()中声明数字以避免浮点类型。其次,pcta$row_dimensions[]不是实现此目的的方法,而是pcta$row_dimensions$group()。我已经在下面制作了解决方案。

rc1<-letters
rc2<-seq(1,1040,40)
rc3<-seq(0,18199,700)
rc<-data.frame(rc1,rc2,rc3)
library(reticulate)
pyxl<-import("openpyxl")
rct<-pyxl$Workbook()
pcta<-rct$active
pcta$title<-"Trial"
library(magrittr)
for (i in 1:length(rc1)) {
  for (j in 1:length(rc)) {
    a<-rc[i,j]
    a %>% pcta$cell(i,j,.)
  }
}
pcta$row_dimensions$group(as.integer(1),as.integer(5),hidden = TRUE)
rct$save("trial.xlsx")