Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

1. który z dostępnych pakietów/funkcji jest najbardziej uniwersalny - oddzielnie występują funkcje do wczytywania/zapisywania plików xls/xlsx ?
2. używam wersji angielskojęzycznej R ze względu na możliwość googlowania komunikatów o błędach, niestety wczytując plik funkcją read.xlsx(xlsx), otrzymuję dataframe pozbawiony polskich znaków, co gorsze, po zapisie tego dataframe przez write.xlsx(xlsx) w pliku wynikowym, zamiast polskich znaków otrzymuję "krzaki" w ich miejscu - czy widzicie jakieś rozwiązanie ?

pozdrawiam

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Próbowałeś RODBC i zdefiniować w ODBC źródło danych, które wskazywałoby na plik Excela? Nie powinno być problemów z unicodem.
Maciej B.

Maciej B. Doktorant

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Może XLConnect? Ten post został edytowany przez Autora dnia 14.07.13 o godzinie 18:18
Wojciech M.

Wojciech M. Senior Software
Engineer | Data
Science Team at
Analyx®

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Ja używam często właśnie XLConnect, o którym Maciej wspomniał - spełnia wszystkie powyższe wymagania.

require(XLConnect)

data <- data.frame(ąćó=sample(1:10,100,TRUE),żłę="ąęśóćżź")

# zapis (w przypadku gdyby plik już istniał - arkusz tworzony jest po istniejących)
results <- loadWorkbook(file.choose(new=TRUE),create=TRUE)
createSheet(results,paste("Sheet",length(getSheets(results))+1))
writeWorksheet(results,data,length(getSheets(results)))
saveWorkbook(results)


# odczyt (ostatniego arkusza, od drugiej kolumny)
wkb <- loadWorkbook(file.choose())
dataLoad <- readWorksheet(wkb,length(getSheets(wkb)),startCol=2)
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Mam dziwny problem z pakietem XLConnect, funkcja loadWorkBook(XLConnect) nie jest ładowana i nie mogę uzyskac informacji w pomocy na jej temat :

library(XLConnect)
loadWorkBook
Error: object 'loadWorkBook' not found
?loadWorkBook
No documentation for ‘loadWorkBook’ in specified packages and libraries:
you could try ‘??loadWorkBook’
#inne funkcje zostały ząładowane np.:
idx2col
function (x)
{
if (!is.numeric(x))
stop("x must be a vector of indices (numeric)!")
sapply(as.integer(x - 1), J("org.apache.poi.ss.util.CellReference")$convertNumToColString,
USE.NAMES = FALSE)
}
<environment: namespace:XLConnect>

#inne funkcje zostały ząładowane np.:
cref2idx
function (x)
{
if (!is.character(x))
stop("x must be a vector of cell references (character)!")
t(sapply(x, function(xx) {
cf <- new(J("org.apache.poi.ss.util.CellReference"),
xx)
c(cf$getRow(), cf$getCol())
}, USE.NAMES = FALSE) + 1)
}
<environment: namespace:XLConnect>

Ten post został edytowany przez Autora dnia 18.07.13 o godzinie 15:17
Wojciech M.

Wojciech M. Senior Software
Engineer | Data
Science Team at
Analyx®

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Dokładna nazwa funkcji to loadWorkbook
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Wojciech M.:
Ja używam często właśnie XLConnect, o którym Maciej wspomniał - spełnia wszystkie powyższe wymagania.

require(XLConnect)

data <- [/quote]> data.frame(ąćó=sample(1:10,100,TRUE),żłę="ąęśóćżź")[quote]
# zapis (w przypadku gdyby plik już istniał - arkusz tworzony jest po istniejących)
results <- loadWorkbook(file.choose(new=TRUE),create=TRUE)[/quote]> createSheet(results,paste("Sheet",length(getSheets(results))+1))[quote]writeWorksheet(results,data,length(getSheets(results)))
saveWorkbook(results)


# odczyt (ostatniego arkusza, od drugiej kolumny)
wkb <- loadWorkbook(file.choose())[/quote]> dataLoad <- > readWorksheet(wkb,length(getSheets(wkb)),startCol=2)[quote]

Jak wyciągnąć Arkusz1 z obiektu 'results' i używać go jako dataframe ?

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Może Ci się przyda: http://miraisolutions.wordpress.com/2011/08/31/xlconne...
Maciej B.

Maciej B. Doktorant

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Możesz wykorzystać funkcję getSheets aby sprawdzić poprawność nazw, następnie w funkcji readWorksheet podać jako argument funkcji sheet='Arkusz1'.

Możesz również wykorzystać, bez wczytywania do pamięci całego arkusza, funkcję readWorksheetFromFile w której podajesz ścieżkę do pliku oraz arkusz, który chcesz zapisać.

Wynikiem obu funkcji jest obiekt klasy data.frame.

edit:

Jedna ważna rzecz, czasem pakiet XLConnect wywraca się podczas wczytywania plików. Jest to problem związany z przydzieleniem pamięci przez Javę (mam nadzieję, że dobrze to rozumiem). Rozwiązaniem tego problemu jest przed załadowaniem pakietu uruchomienie poniższego kodu (zmiana opcji).


options(java.parameters = "-Xmx4g" )
library(XLConnect)
Ten post został edytowany przez Autora dnia 19.07.13 o godzinie 12:40
Michał Bojanowski

Michał Bojanowski socjolog, analityk

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

Świeżynka w temacie: http://www.milanor.net/blog/?p=779
Michał P.

Michał P. petrochemia

Temat: Wczytywanie i zapisywanie xls/xlsx, a polskie znaki

do odczytu plików xls polecam pakiet "gdata"

Następna dyskusja:

Polskie znaki z bazy MySQL




Wyślij zaproszenie do