У меня проблемы с автоматическим созданием границ при экспорте файла Excel с помощью r.Ниже мой код и вывод, который я сейчас генерирую, и то, как я бы хотел, чтобы он был.
Я пытался помочь себе с решением здесь , но не смог заставить его работатьмой пример.
Вот некоторый код для воспроизведения проблемы:
#some dataframes to export as excel files
Agent1 <- data.frame("QUEUE" = c("call PA", "call", "Call", "call CB"), "NR" = c(6,15,3,7), "Client" = c("xyz company", "some other company", "Company abs", "BNM"), stringsAsFactors = FALSE)
Agent2 <- data.frame("QUEUE" = c("call PA", "call", "Call", "call CB"), "NR" = c(7,13,5,3), "Client" = c("xyz company", "some other company", "Company abs", "BNM"), stringsAsFactors = FALSE)
Agent3 <- data.frame("QUEUE" = c("call PA", "call", "Call", "call CB"), "NR" = c(4,4,3,7), "Client" = c("xyz company", "some other company", "Company abs", "BNM"), stringsAsFactors = FALSE)
nr_of_agents <- 3
# Variable creation for counting cases per agent
for (a in 1 : nr_of_agents) {
agent_s <- paste0("Agent",a,"sum")
assign(agent_s, 0)
}
for (a in 1:nr_of_agents){ #Counting cases per agent
agent <- paste0("Agent",a)
tempv <- eval(as.name(agent))
agent_s <- paste0("Agent",a,"sum")
tempv1 <- eval(as.name(agent_s))
tempv1 <- sum(tempv$NR)
assign(agent_s, paste("Total cases: ", tempv1))
}
## EXCEL OUTPUT
wb<-createWorkbook(type="xlsx")
TITLE_STYLE <- CellStyle(wb)+ Font(wb, heightInPoints=16, color=NULL, isBold=TRUE) +
Alignment(h="ALIGN_CENTER")
TEXT_STYLE <- CellStyle(wb)+ Font(wb, heightInPoints=12, color=NULL, isBold=FALSE) +
Alignment(h="ALIGN_RIGHT")+
Border(color="black", position=c("TOP"),
pen=c("BORDER_THIN"))
# Styles for the data table row/column names
TABLE_ROWNAMES_STYLE <- CellStyle(wb) + Font(wb, isBold=TRUE)
TABLE_COLNAMES_STYLE <- CellStyle(wb) + Font(wb,color="#FFFAFA", heightInPoints=12, name="Calibri Light", isBold=TRUE) +
Fill(foregroundColor="#9e2b11",pattern="SOLID_FOREGROUND")+#, backgroundColor="lightblue")
Alignment(wrapText=TRUE, horizontal="ALIGN_CENTER")+
Border(color="black", position=c("TOP", "BOTTOM", "LEFT", "RIGHT"),
pen=c("BORDER_THIN"))
#Code to add title
xlsx.addTitle<-function(sheet, rowIndex, title, titleStyle){
rows <-createRow(sheet,rowIndex=rowIndex)
sheetTitle <-createCell(rows, colIndex=3)
setCellValue(sheetTitle[[1,1]], title)
setCellStyle(sheetTitle[[1,1]], titleStyle)
}
#Code to add sums of cases per agent
xlsx.addsums<-function(sheet, rowIndex, title, titleStyle){
rows <-createRow(sheet,rowIndex=rowIndex)
sheetTitle <-createCell(rows, colIndex=3)
setCellValue(sheetTitle[[1,1]], title)
setCellStyle(sheetTitle[[1,1]], titleStyle)
}
names <- c("Mark", "Neli", "Sara") # Agents names
for (a in 1 : nr_of_agents) {
agent <- paste0("Agent",a)
tempv <- eval(as.name(agent))
agent_S <- paste0("Agent",a,"sum")
tempv1 <- eval(as.name(agent_S))
sheet<-createSheet(wb, sheetName = names[a]) #sheet creation
xlsx.addTitle(sheet, rowIndex=1, title=names[a], #Adding title to each sheet
titleStyle = TITLE_STYLE)
addDataFrame(tempv, sheet, startRow=3, startColumn=1, #Adding the dataframes
colnamesStyle = TABLE_COLNAMES_STYLE,
rownamesStyle = TABLE_ROWNAMES_STYLE
)
xlsx.addsums(sheet, rowIndex=(3+ nrow(tempv)+1), title= tempv1, #Adding total sum for every agent
titleStyle = TEXT_STYLE)
autoSizeColumn(sheet, colIndex=c(1:ncol(tempv))) #Auto size columns
}
saveWorkbook(wb, paste0(Sys.Date()," Test_file",".xlsx"))
Изображение текущего и желаемого результата
Как видно на рисункеКроме того, автоматическая ширина столбца работает некорректно, его размер зависит от длины заголовка столбца, а не от самого длинного слова в столбце.Есть идеи, как это решить?
Спасибо за помощь!