#R_exel \ # R 안쪽 에서 엑셀 / xlsx 를 조작 합 니 다 (자동화 보고서 복음)

4178 단어 R
다음으로 전송:http://www.loyhome.com/%E4%BB%8Er%E9%87%8C%E9%9D%A2%E5%BA%95%E5%B1%82%E6%93%8D%E7%BA%B5excelxlsx%EF%BC%88%E8%87%AA%E5%8A%A8%E5%8C%96%E6%8A%A5%E5%91%8A%E7%A6%8F%E9%9F%B3%EF%BC%89/
그래, 내 가 이 베 이에 서 가장 많이 괴 롭 히 는 것 은 자동화 보고 서 를 만 들 때 각종 소프트웨어 간 의 상호 호출 이다. 무슨 R 이 야, SAS 야, Teradata 야, Excel 아, Python 이 야, 어차피 서로 호출 할 기회 가 있 으 니까.이 럴 때마다 나 는 library 의 풍부 한 도 구 를 선택 하 는 것 이 얼마나 중요 한 지 감개 무량 하 다!You could hardly expect what you colleagues are handy with!(P. s. VBA 라 는 하늘 을 거 스 르 는 존재 에 대해 서 는 말 하지 마 세 요. 언제 쯤 그것 을 연구 할 시간 이 있 으 면 다른 것 을 배우 면 안 될 까요?)
오늘 은 더 이상 못 참 겠 다 + 기분 좋게 R 과 엑셀 을 괴 롭 혔 다.이것 은 간단하게 R 에서 엑셀 데 이 터 를 읽 고 쓰 는 것 이 아니 라 진심으로 R 로 엑셀 안의 셀 (cell) 을 조작 하 는 것 이다. 데 이 터 를 읽 고 쓰 는 것 외 에 스타일 을 정의 해 야 한다.excel 은 기발 한 소프트웨어 로 서 you may never expect where people would paste data to!그리고 그들 은 다시 한 무더기 의 스타일 을 사용자 정의 했다.
하지만 어 쩔 수 없다. 사람들 이 정의 한 '고급 서양풍' 보고서 자 세 를 쉽게 움 직 일 수 는 없 잖 아.순 순 히 안 으로 데 이 터 를 붙 일 수 밖 에 없어 요.이 일 은 비록 한 번 두 번 손 을 쓰 면 되 지만, 서 너 번 은 정말 미 쳐 버 릴 것 이다.anyway, 모든 일 은 해결 할 수 있 는 방법 이 있 습 니 다.
옛날 에 Yixuan 의 블 로그 에서 xlsx 라 는 가방 이 있다 는 것 을 알 게 되 었 습 니 다. 그 때 는 이것 만 읽 고 xlsx 를 쓸 수 있 었 습 니 다..........................................
엑셀 형식의 자동화 보고 서 를 만 들 기 위해 서 (knitr 를 왜 안 쓰 는 지 묻 지 마 세 요. * * * 안 쓰 면 눈물 이 잖 아 요!) 제 가 해결 해 야 할 것 은:
기 존 xlsx 파일 을 읽 고 형식 을 유지 하 며 새로운 형식 을 추가 합 니 다. 해당 위치 에 새로운 데 이 터 를 붙 입 니 다. (물론 이 수요 만 있 으 면 ODBC 를 통 해 할 수 있 습 니 다.) 첫 번 째 는 아주 간단 합 니 다. 바로 yixuan 코드 안의 createWorkbook() 보다 loadWorkbook() 로 바 꾸 면 됩 니 다. 그리고 해당 하 는 sheet 를 찾 으 면 이것 도 아주 간단 합 니 다. 한 줄 getSheets 로 해결 합 니 다.
그리고 두 번 째 단 계 는 cell (너무 비효 율 적) 을 조작 하지 말고 cellblock 을 직접 조작 하 는 것 을 권장 합 니 다. CellBlock() 새로운 Cellblock 을 정의 한 다음 에 유연 하 게 활용 할 수 있 습 니 다 CB.setBorder() CB.setColData()먼저 테 두 리 를 추가 한 다음 열 에 데 이 터 를 채 울 수 있 습 니 다. 여기 서 열 에 따라 데 이 터 를 채 우 는 것 은 R 안의 Data Frame 이 하나의 데이터 형식 이기 때 문 입 니 다. 엑셀 의 cellblock 에 한꺼번에 붙 여 넣 으 면 오류 가 발생 합 니 다. BTW 는 테 두 리 를 정의 하기 위해 Border() 사용 해 야 합 니 다. 유사 한 것 은 Fill 과 Font 등 을 정의 할 수 있 습 니 다.
위 와 같이 addDataFrame() 로 데 이 터 를 직접 붙 이지 않 는 것 이 좋 습 니 다. 형식 은 덮어 쓸 수 없습니다. 새로운 sheet 에 데 이 터 를 붙 이려 면 write.xlsx(sheetName="newsheet",append=T) 좋 습 니 다. 위 아래 의 API 를 통 해 소란 을 피 울 필요 가 없습니다.
마지막 으로 유용 한 함수 가 하나 더 있 습 니 다. autoSizeColumn() 열 폭 을 자동 으로 조정 할 수 있 습 니 다. 다 듬 은 후에 saveWorkbook() 저장 하면 됩 니 다.
마지막 으로 소중 한 조언 하나. R 안에 데 이 터 를 정리 하고 엑셀 에 출력 하려 고 합 니 다.
내 가 마지막 으로 자동화 보고 서 를 작성 한 코드 를 첨부 합 니 다:
library("xlsx")
test_template template.xlsx 。 。
design_tab data_block border pen=c("BORDER_THIN", "BORDER_THIN")) # —— 。
for (i in 1:ncol(mydata))
{
CB.setBorder(data_block, border,colIndex = i,rowIndex=1:nrow(onetime_design_tab)) #
CB.setColData(data_block, mydata [, i], i, rowOffset = 0, showNA = F, colStyle = NULL) #
}
border_bottom data_block_bottom mydata
, 5, 1, ncol (my data) \ # 마지막 줄 CB. setBorder (data block bottom, border bottom, 1, 1: ncol (onetime design tab) \ # 마지막 줄 형식 을 정의 합 니 다 autoSizeColumn (design tab, 5: (5 + ncol (onetime design tab)))열 폭 을 조정 하 는 savWorkbook (test template, file = output xlsx name) \ \ # 저장 \ # # # # # # addrowdata write. xlsx (rawddata, file = out xlsx name, sheetName = "raw data", append = T, row. nams = F) \ # 원본 데 이 터 를 직접 붙 이 고 형식 이 없 는 \ # # \ # # # # addquery R 파일 # R SQL file write. xlsx (SQL file.. file file, file = out xlsx 파일, file xlsx name, sheetName = "query SQL" "쿼 리 SQL", "쿼 리 SQL SQL", append = = = "" "쿼 리 SQL SQL", 이름, "쿼 s = F)\ # 새 sheet 에 코드 를 직접 붙 여 write. xlsx (R file, file = output xlsx name, sheetName = "query R", append = T, row. names = F)

좋은 웹페이지 즐겨찾기