포맷을 유지하면서 R에서 Excel로 템플릿에 쓰기
R에는 Excel(또는 csv)에 쓰고 멋진 형식으로 출력하는 데이터 프레임이 있습니다(예를 들어 셀 A1에서 시작하지 않고 테두리, 테이블 제목 포함).
현재 write.table 함수를 사용하여 데이터 프레임을 csv 파일에 쓴 후 데이터를 복사하여 Excel 문서에 붙여넣습니다.이때 테이블은 템플릿으로 포맷되어 있습니다.
데이터 프레임이 1개뿐인 경우에는 이 문제가 크게 발생하지 않지만, 이제 여러 데이터 프레임에 대해 실행하고 여러 탭에 걸쳐 Excel을 적용하고자 합니다.
모든 포맷을 올바르게 설정한 상태에서 데이터 프레임을 기존 Excel 스프레드시트의 특정 셀에 자동으로 복사할 수 있는 방법이 있습니까?
조란이 말했듯이 XLConnect 패키지를 가지고 있습니다.무엇이 가능한지를 정확하게 파악하려면 , 그 패키지의 메뉴얼 또는 Vignett를 주의 깊게 읽어 주세요.
XLConnect를 사용하면 스타일 동작을 "없음"으로 설정하지 않는 한 일반적으로 셀 스타일을 덮어씁니다.
setStyleAction(wb,XLC$"STYLE_ACTION.NONE")
올바른 길로 인도하기 위해 다음과 같은 간단한 예를 제시하겠습니다.
require(XLConnect)
wb <- loadWorkbook("test.xlsx", create=TRUE)
setStyleAction(wb,XLC$"STYLE_ACTION.NONE")
Data <- data.frame(
a = 1:10,
b = letters[1:10]
)
writeWorksheet(wb,Data,"aSheet",startRow=1,startCol=1,header=TRUE)
saveWorkbook(wb)
전에

끝나고

EDIT : Dirk Eddelbuettel에서 설명한 바와 같이,xlsx패키지.저는 개인적으로XLConnectxls와 xlsx를 모두 처리할 수 있고 EXCEL 파일 조작에 사용한 이전 패키지보다 훨씬 안정적이었습니다.아직 사용하지 않았습니다.xlsx패키지는 아직 없습니다.데이터 가져오기/내보내기 CRAN 페이지를 통해 사용 가능한 항목을 확인할 수 있습니다.
일부 사용자가 이 기능을 사용하는 방법을 문의하고 있었습니다.xlsx패키지.
매우 우수하고 광범위한 사용 예가 있습니다.xlsxSHDA에서 패키지화.
셀 포맷, 여러 개의 시트가 있는 워크북, 그림 추가 방법 등에 대한 예가 있습니다.
아래는 다음 기능을 기반으로 합니다.openxlsx여기서 워크북을 지정합니다(from_wb시트명/장소( )를 지정합니다.from_sheet스타일과 워크북( )이 있습니다.to_wb시트명/장소( )를 지정합니다.to_sheet스타일 전송처) :
주의: 저는purrr그리고.glue패키지도 있습니다만, 이것은 베이스 R로 고쳐 쓸 수 있습니다.
copyStyle <- function(from_wb, to_wb, from_sheet, to_sheet) {
# check for workbook objects
if (!(inherits(from_wb, "Workbook") && inherits(to_wb, "Workbook"))) {
stop("from_wb and to_wb must be Workbook objects.")
}
# get all sheet names from workbooks
from_sheets <- from_wb$sheet_names
to_sheets <- to_wb$sheet_names
# convert sheets from numeric to sheet name. wb$styleObjects uses sheet name
if (is.numeric(from_sheet)) {
from_sheet <- from_wb$getSheetName(from_sheet)
}
if (is.numeric(to_sheet)) {
to_sheet <- to_wb$getSheetName(to_sheet)
}
# if sheet name given check that it exists
if (is.character(from_sheet) && !from_sheet %in% from_sheets) {
stop(glue::glue("{from_sheet} was not found in from_wb"))
}
if (is.character(to_sheet) && !to_sheet %in% to_sheets) {
stop(glue::glue("{to_sheet} was not found in to_wb"))
}
# get from_wb sheet styles
from_styles <- purrr::keep(from_wb$styleObjects, ~ .x$sheet == from_sheet)
# add styles to to_wb
purrr::walk(from_styles, ~ openxlsx::addStyle(to_wb,
to_sheet,
.x$style,
rows = .x$rows,
cols = .x$cols))
return(to_wb)
}
사용.
library(openxlsx)
wb <- loadWorkbook("getStyle.xlsx")
new_wb <- write.xlsx(head(iris), "transfer_style.xlsx")
# can give sheet name or index
copyStyle(from_wb = wb, to_wb = new_wb, from_sheet = "Sheet1", to_sheet = 1)
# must save workbook after copying style
saveWorkbook(new_wb, "transfer_style.xlsx", overwrite = T)
입력
getStyles.xlsx는 여러 시트에 여러 스타일이 있는 로컬 Excel 워크북입니다.
산출량
transfer_styles.xlsx:
언급URL : https://stackoverflow.com/questions/11228942/write-from-r-into-template-in-excel-while-preserving-formatting
'programing' 카테고리의 다른 글
| Windows에 GRP와 같은 패턴 매칭 유틸리티가 있나요? (0) | 2023.04.19 |
|---|---|
| Xcode - NSUnknownKey 수정 방법예외', 이유:… 이 클래스는 키 X" 오류에 대한 키 값 코딩에 준거하지 않습니다. (0) | 2023.04.19 |
| Windows에서 cat을 대체할 수 있습니까? (0) | 2023.04.19 |
| std:: 문자열을 LPCTR로 변환하는 방법 (0) | 2023.04.19 |
| 명령줄에서 SQLCMD의 "해당 x 행"을 억제하는 방법이 있습니까? (0) | 2023.04.19 |

