如何使用R的网状包和Python的OpenPyxl在ex中隐藏行

2024-05-21 08:15:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图创建一个excel文件,其中包含隐藏/折叠的行,比如在openpyxlwebpage上,但是通过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:41"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' 

Tags: 文件代码inrc1excelseqrowdimensions
1条回答
网友
1楼 · 发布于 2024-05-21 08:15:20

一个小时后才把我自己的问题的答案贴出来有点尴尬,但我想我会把它贴出来,以方便其他可能试图解决类似问题的人。首先,数字需要在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")

相关问题 更多 >