R: добавить лист в существующую книгу Excel - PullRequest
0 голосов
/ 26 июня 2018

В моем сценарии мне нужно создать книгу Excel со многими листами, где первые 2 листа по умолчанию считываются из другой книги и включаются в экспортированный файл Excel.

Я использую пакет xlsx для форматирования экспорта в Excel. Однако я не смог найти ни одной функции в пакете xlsx, которая могла бы прочитать лист из Excel и добавить его к другой.

Вот мой код для чтения первого Excel:

template_wb <- loadWorkbook(file = 'template.xlsx')
sheets <- getSheets(wb)  
sheet1 <- sheets[[1]]
sheet2 <- sheets[[2]]

Во второй части кода я создаю еще одну рабочую книгу, которая содержит несколько листов, из которых sheet1 и sheet2 должны быть одним из.

 wb<-createWorkbook(type="xlsx")
 as_sheet <- createSheet(wb, sheetName = "AS")
 dc_sheet <- createSheet(wb, sheetName = "DC")
 ro_sheet <- createSheet(wb, sheetName = "RO")

 ### add content to worksheets
 # the suggested code should go there

### save workbook
saveWorkbook(wb, 'out.xlsx')

Я хотел бы добавить содержимое sheet1 в dc_sheet и содержимое sheet2 в ro_sheet, прежде чем добавлять дополнительные данные в as_sheet и затем сохранить книгу.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете работать с копией и сохранить ее как новый файл.

wb <- loadWorkbook(file)  
# Rename the sheets
wb$setSheetName(0L, "AS")
wb$setSheetName(1L, "DC")
# Delete the aditional sheets
sheets <- getSheets(wb)  
lapply(names(sheets)[-(1:2)], function(x) removeSheet(wb, sheetName = x))
# Assign the sheets to the objects of R
sheets <- getSheets(wb)  
as_sheet <- sheets[[1]]
dc_sheet <- sheets[[2]]
# Create the new sheet
ro_sheet <- createSheet(wb, sheetName = "RO")
# save workbook
saveWorkbook(wb, 'out.xlsx')
0 голосов
/ 26 июня 2018

Я почти уверен, что простой оператор присваивания сделает свое дело:

template_wb <- loadWorkbook(file = 'template.xlsx')
sheets <- getSheets(template_wb)  
sheet1 <- sheets[[1]]
sheet2 <- sheets[[2]]
wb<-createWorkbook(type="xlsx")
as_sheet <- createSheet(wb, sheetName = "AS")
dc_sheet <- createSheet(wb, sheetName = "DC")
ro_sheet <- createSheet(wb, sheetName = "RO")
dc_sheet<-sheet1
ro_sheet<-sheet2
# Your code here
saveWorkbook(wb, 'out.xlsx')

Я попробовал, и все заработало

...