your programing

R - 자동 장착 Excel 열 너비

lovepro 2023. 6. 11. 16:52
반응형

R - 자동 장착 Excel 열 너비

다음을 사용하여 열 너비를 자동 맞춤하는 방법openxlsx?

내 열 중 하나에 날짜 변수(예: 21-08-2017) 및 를 사용하여 복사한 경우ctrl+c엑셀에서, 그리고 다른 곳에 정상적으로 붙여넣은 것은 다음과 같이 보여줍니다.#######(Excel에 내용을 표시하기 위해 열 너비를 늘리면 정상적으로 붙여넣습니다.)저는 그 반복적인 작업을 제 코드에 통합하고 싶습니다.제가 지금 사용하고 있는 것은 다음과 같습니다.

WB <- loadWorkbook(File)
addWorksheet(WB, Sheet)
writeDataTable(WB, Sheet, DF, withFilter=F, bandedRows=F, firstColumn=T)
saveWorkbook(WB, File,  overwrite =TRUE)

관련 코드 전체를 첨부하였으며, 테이블 값에 따른 조건부 포맷도 진행하고 있습니다.여기에 자동 맞춤 열 너비를 통합하는 방법을 제안해 주십시오.

편집: R의 XLSX 출력은 기본적으로 8.43열 너비입니다. 셀 내용에 따라 자동 맞춤으로 설정하거나 각 열에 대해 수동으로 설정합니다.

To Mod: 제가 openxlsx를 사용하여 R에서 해결하려고 하는 문제입니다.어쨌든, 관심을 가져주셔서 감사합니다.

알겠습니다, 서류를 다시 한 번 자세히 찾아본 결과 알았습니다.온라인 솔루션의 부족으로 인해 실제로 이것을 사용하는 사람은 거의 없는 것 같습니다.

setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = "auto")

그러나 여전히 원하는 결과를 제공하지 않으며, 날짜 열이 여전히 약간 짧으며 다음과 같이 표시됩니다.########열 헤더가 잘 맞지 않는 경우(굵은 글씨로 표시됨)

편집:

마지막으로 추가하기로 선택했습니다.c(7.5, 10, "auto", ...)정의를 대신하여"auto"완전히 역동적이지는 않지만 현재로서는 문제를 해결합니다.더 나은 답변을 기대합니다.

을 고려할 때widths = "auto"원하는 대로 작동하지 않았습니다. 가장 긴 값 + 2(압축 처리)를 기준으로 폭을 할당하는 보다 일반적인 답변입니다.

width_vec <- apply(DF, 2, function(x) max(nchar(as.character(x)) + 2, na.rm = TRUE)) setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = width_vec)

열 머리글을 기준으로 너비를 할당하려면 다음을 수행합니다.

width_vec_header <- nchar(colnames(DF)) + 2
setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = width_vec_header)

그리고 헤더든 본문의 셀이든 열당 가장 긴 문자열을 기준으로 너비를 할당하려면 "병렬" 최대 함수를 사용합니다(벡터화된 최대 함수처럼).
width_vec <- apply(DF, 2, function(x) max(nchar(as.character(x)) + 2, na.rm = TRUE))
width_vec_header <- nchar(colnames(DF)) + 2
max_vec_header <- pmax(width_vec, width_vec_header)
setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = max_vec_header )

XL 연결 사용 중...

setColumnWidths(WB, Sheet, column = 1:ncol(DF), width = -1)

참조: https://cran.r-project.org/web/packages/XLConnect/XLConnect.pdf

위와 같은 문제가 있었지만, 데이터 프레임 목록으로 작업하고 있었습니다.저는 그것을 설명하기 위해 깔끔한 구절을 사용하여 릭의 답변을 수정했습니다.저는 또한 기둥 폭이 75보다 넓지 않기를 원했습니다.이것은 여전히 위에 설명된 날짜 문제를 해결하지 못했습니다.내 날짜와 함께 타임스탬프가 표시되지 않기를 원했으며 Excel에서 날짜 형식 지정 방법에 대한 옵션을 설정할 수 있습니다.그래서 저는 옵션("openxlsx.datetimeFormat" = "mm/dd/yyyy")을 사용했습니다.서식 지정에 대한 자세한 내용은 여기를 참조하십시오.

myList <- list(A = data.frame(ID = c("AAA", "AAA"), 
                          Test = c(1, 1), 
                          Value = 1:2), 
           B = data.frame(ID = c("BBB", "BBB", "BBB"), 
                          Test = c(1, 3, 5), 
                          Value = 1:3),
           C = data.frame(Test = c(1, 3, 5), 
                          Value = 1:3))

data_cols <- myList %>%
  map(~ 1:ncol(.), .depth = 2)

width_vec <- myList %>% 
  map(~ summarise_all(., funs(max(nchar(as.character(.)))), na.rm = TRUE), .depth = 2) %>% 
  map(~ unlist(., use.names = FALSE), .depth = 2) %>% 
  map(~ . + 2, .depth = 2)
width_vec_header <- map(myList, ~ nchar(names(.)) + 2, .depth = 2) 
max_vec <- map2(width_vec, width_vec_header, ~ pmin(75, pmax(.x, .y, 0)), .depth = 2)
pwalk(list(names(myList), data_cols, max_vec), ~ setColWidths(wb, ..1, ..2, widths = ..3))

언급URL : https://stackoverflow.com/questions/45860085/r-autofit-excel-column-width

반응형