Ich exportiere Code, um Excel zu erstellen, und versuche, ihn auf 1 Arbeitsmappe über 3 Blätter zu übertragen. Um dies zu tun, habe ich jeden Befehl dreimal wiederholt. Kann dies kein guter Weg sein, dies zu tun? Vielleicht kann mir jemand sagen, wo ich falsch liege?

library(r2excel)
#> Loading required package: xlsx

 sample_prime1 <- 1:4
 sample_prime2 <- 10:14
 sample_prime3 <- 22:26
# Create an Excel workbook. 
filename <- "validitycheck.xlsx" #The name of the file that will be saved
wb <- createWorkbook(type="xlsx") #Creating an excel workbook

# Create a sheet in that workbook to contain the data table
sheet1 <- createSheet(wb, sheetName = "prime1")
sheet2 <- createSheet(wb, sheetName = "prime2")
sheet3 <- createSheet(wb, sheetName = "prime3")
 

# Add table : add a data frame for sheet 1
xlsx.addHeader(wb, sheet1, value="Validty for prime 1")
xlsx.addLineBreak(sheet1, 1)
xlsx.addTable(wb, sheet1, sample_prime1,
               fontColor="darkblue", fontSize=14,
              rowFill=c("white", "lightblue"),
              startCol=2, 
              row.names=FALSE, 
              col.names = FALSE)

# Add table : add a data frame for sheet 2
xlsx.addHeader(wb, sheet2, value="Validty for prime 2")
xlsx.addLineBreak(sheet2, 1)
xlsx.addTable(wb, sheet2, sample_prime2,
               fontColor="darkblue", fontSize=14,
              rowFill=c("white", "lightblue"),
              startCol=2, 
              row.names=FALSE, 
              col.names = FALSE)


# Add table : add a data frame for sheet 3
xlsx.addHeader(wb, sheet3, value="Validty for prime 3")
xlsx.addLineBreak(sheet3, 1)
xlsx.addTable(wb, sheet3, sample_prime3,
               fontColor="darkblue", fontSize=14,
              rowFill=c("white", "lightblue"),
              startCol=2, 
              row.names=FALSE, 
              col.names = FALSE)
0
Gabriella 7 Okt. 2020 im 21:20

2 Antworten

Beste Antwort

Die Idee von @DavidMas ist großartig (ein großes Lob und vielen Dank, dass Sie uns dies beigebracht haben). Sie können die Funktion verbessern und auf n Daten verallgemeinern, indem Sie mit einer Liste arbeiten, um die Daten und einen Vektor für die Namen zu speichern. Anschließend können Sie die Daten mit einer Schleife drucken. Hier der Code:

library(r2excel)
#Data
sample_prime1 <- 1:4
sample_prime2 <- 10:14
sample_prime3 <- 22:26
#Store in a list
List <- list(sample_prime1,sample_prime2,sample_prime3)
#Function
myfun <- function(wb,name,df) {
  # Create object
  sheet <- createSheet(wb, sheetName = name)
  # Add headers
  xlsx.addHeader(wb, sheet, value=paste0('Validty for prime ',name))
  xlsx.addLineBreak(sheet, 1)
  xlsx.addTable(wb, sheet, data.frame(df),
                fontColor="darkblue", fontSize=14,
                rowFill=c("white", "lightblue"),
                startCol=2, 
                row.names=FALSE, 
                col.names = FALSE)
}
#Create workbook
filename <- "validitycheck.xlsx" 
wb <- createWorkbook(type="xlsx")
#Loop
#Vector for names
vnames <- paste0('prime',1:length(List))
#Code
for(i in 1:length(List))
{
  myfun(wb,vnames[i],List[i])
}
1
Duck 7 Okt. 2020 im 19:09

Vielleicht könnten Sie eine Funktion erstellen und sie dreimal aufrufen? Ich habe das Paket nicht, daher kann ich es nicht testen, aber so etwas könnte funktionieren.

addSheet <- function(wb,sheetName,value,data) {
  # Create a sheet in that workbook to contain the data table
  sheet <- createSheet(wb, sheetName = sheetName)
  
  
  # Add table : add a data frame for sheet 1
  xlsx.addHeader(wb, sheet, value=value)
  xlsx.addLineBreak(sheet, 1)
  xlsx.addTable(wb, sheet, data,
                fontColor="darkblue", fontSize=14,
                rowFill=c("white", "lightblue"),
                startCol=2, 
                row.names=FALSE, 
                col.names = FALSE)
}

Und dann könntest du rennen

filename <- "validitycheck.xlsx" 
wb <- createWorkbook(type="xlsx")

addSheet(wb,"prime1","Validty for prime 1",sample_prime1)
addSheet(wb,"prime2","Validty for prime 2",sample_prime2)
addSheet(wb,"prime3","Validty for prime 3",sample_prime3)
1
David Mas 7 Okt. 2020 im 18:43