Использование write.xlsx для замены существующего листа пакетом R xlsx

Я использую пакет xlsx Версия: 0.5.7 Дата: 01.08.2014. в версии R 3.0.1 (16 мая 2013 г.) -- Хорошая спортивная платформа: i386-w64-mingw32/i386 (32-разрядная версия).

У меня есть файл xlsx как минимум с двумя листами (скажем, A и B). Мне нужно прочитать данные из A, отредактировать их и сохранить в B. Это нужно делать на периодической основе.

Я могу читать данные из A с помощью read.xlsx. После редактирования фрейма данных я хочу сохранить его на существующем листе B в том же файле xlsx.

Я пытаюсь с этой строкой

write.xlsx(down, paste0(root,'/registration reports/registration complete_WK.xlsx'), sheet="data_final", col.names=T, row.names=F, append=T, showNA=F)

но это дает мне эту ошибку:

Error in `.jcall(wb, "Lorg/apache/poi/ss/usermodel/Sheet;", "createSheet", ` : 
  java.lang.IllegalArgumentException: The workbook already contains a sheet of this name

Мне нужно заменить этот существующий лист несколько раз. Как я могу это сделать?


person Filippo    schedule 20.01.2015    source источник
comment
Вот пример, перейдите к концу статьи: danganothererror.wordpress.com/2012/02/12/   -  person kosa    schedule 20.01.2015
comment
Я не думаю, что write.xlsx() перезапишет существующий рабочий лист. Можете ли вы прочитать весь файл .xlsx и переписать все рабочие листы, включая новый лист, который вам нужен?   -  person Steven    schedule 20.01.2015
comment
Обычно мы не поддерживаем исправления в устаревших версиях R. По какой причине вы не можете обновиться до 3.1.2 и соответствующих пакетов?   -  person Carl Witthoft    schedule 20.01.2015
comment
@CarlWitthoft Спустя несколько версий проблема все еще существует. Это не ошибка, а желаемое поведение, которое не позволяет вам переопределить свои листы.   -  person David    schedule 03.06.2019


Ответы (2)


Если вы хотите сохранить новый фрейм данных в существующем файле Excel, вам сначала нужно загрузить xlsx-файл:

wb <- loadWorkbook(file)

какие листы у вас есть, вы получите вот так:

sheets <- getSheets(wb)

вы можете легко удалять и добавлять (и, таким образом, заменять) листы с помощью:

removeSheet(wb, sheetName="Sheet1")
yourSheet <- createSheet(wb, sheetName="Sheet1")

чем вы можете заполнить листы кадрами данных:

addDataFrame(yourDataFrame, yourSheet, <options>)
addDataFrame(anotherDataFrame, yourSheet, startRow=nrow(yourDataFrame)+2)

и последний шаг - сохранить всю книгу как .xlsx:

saveWorkbook(wb, file)

кстати: документация пакета xlsx действительно хороша и полезна для таких вопросов :) http://cran.r-project.org/web/packages/xlsx/xlsx.pdf

person solmonta    schedule 17.02.2015
comment
не проще ли просто использовать openxlsx, так как он предоставляет функции для редактирования существующего листа? - person samsamara; 13.07.2021

Возможно, установленная на вашем компьютере Java несовместима с библиотекой xlsx. В следующем потоке обсуждается аналогичная проблема в отношении того же пакета: введите здесь описание ссылки

Кроме того, ваша проблема может быть решена с помощью другого пакета, связанного с Excel, например XLConnect. См. этот пост: введите здесь описание ссылки

person David C.    schedule 01.09.2016
comment
Пожалуйста, рассмотрите возможность добавления более подробной информации к вашему сообщению. В случае, если ваши ссылки изменятся или станут недоступными, ваш ответ не будет полезен. - person dckuehn; 02.09.2016