R com Excel

Neste post mostramos como criar arquivos Excel a partir do R.

Miguel Cleaver
09-16-2019

Neste post exploramos como utilizar o R para escrever arquivos do Microsoft Excel (extensão .xlsx). Uma das grandes vantagens do R é documentar todas as operações que fazemos para gerar resultados e informações no Excel. Por exemplo, muitas vezes não lembramos quais tabelas e arquivos utilizamos para gerar nossas tabelas. Também pode ser que não lembremos se fizemos alguma alteração manual. Se precisarmos revisar o passo a passo do que fizemos pode ser que encontremos dificuldade em replicar o que foi feito. Se você usa R, não terá esse problema. Com o pacote openxlsx é possível ler e escrever arquivos com extensão “.xlsx”, enquanto que o script de R se encarrega de documentar o passo a passo das operações que você fez sobre os dados. Como escrever arquivos é um pouco mais complicado do que lê-los, mostramos, neste post, apenas como escrevê-los.

Como escrevemos arquivos Excel com extensão .xlsx?

O modo mais simples de você escrever um arquivo “xlsx” utilizando o R se dá quando você tem uma única tabela de dados. Esse caso é bastante trivial e deixaremos para o final do post.

A outra forma de escrever arquivos “xlsx” é um pouco mais trabalhosa, mas nada muito complicado. A pergunta que naturalmente surge é por que usaríamos uma forma mais trabalhosa se existe uma forma menos trabalhosa?

Há vezes que queremos trabalhar com diversas planilhas em um mesmo arquivo Excel e é justamente para esse caso que existe uma forma mais trabalhosa. Além disso, há maior flexibilidade, pois podemos editar arquivos como se estivéssemos utilizando o próprio Excel (é possível escolher cores, escolher a fonte das células, etc). Se você tiver interesse de conhecer mais sobre as funcionalidades do pacote pode ler a documentação do openxlsx aqui.

Exemplo “trabalhoso”

Primeiro carregamos os seguintes pacotes:


library(dplyr)
library(openxlsx)

Para este exemplo trabalharemos com a ideia de que queremos escrever duas planilhas em um único arquivo “xlsx”. Dessa forma, vamos trabalhar com duas tabelas disponíveis no pacote dplyr: “mtcars” e “iris”. A seguir alocamos cada uma das tabelas para os objetos df1 e df2.


data("mtcars")
data("iris")
df1 <- mtcars
df2 <- iris

A criação de um arquivo “xlsx” no R passa por uma sequência de passos bem definidos. Primeiro devemos criar um objeto do tipo “workbook”. Isso pode ser feito da seguinte forma:


wb <- createWorkbook()

Ao criar um objeto do tipo “workbook” iniciamos um projeto de arquivo “xlsx” no ambiente do R sem, de fato, haver criado esse arquivo em alguma pasta do nosso computador. Deve-se notar que o comando inicia um arquivo sem nenhuma planilha, ou seja, o arquivo não possui nem sequer uma planilha em branco como ocorre quando criamos um arquivo em branco no programa Excel.

Portanto, o segundo passo exige que criemos uma planilha antes de escrever os dados. Sempre que quisermos adicionar uma nova planilha no projeto de arquivo “xlsx”, devemos dizer ao R explicitamente para que o faça. A função addWorksheet cria apenas uma planilha. Se quisermos criar duas planilhas, precisamos utilizar essa função duas vezes.

No primeiro argumento da função addWorksheet deve-se indicar um objeto do tipo “workbook” (no nosso caso temos o objeto wb). No segundo argumento deve-se definir o nome da planilha. Abaixo criam-se duas planilhas no mesmo projeto de arquivo Excel.


addWorksheet(wb, sheetName = "planilha-mtcars")
addWorksheet(wb, sheetName = "planilha-iris")

As planilhas recém criadas estão em branco. Para escrever os dados que queremos nas respectivas planilhas devemos utilizar a função writeData. Esta função possui 3 argumentos muito importantes. No primeiro argumento indica-se um objeto do tipo “workbook”; no argumento “sheet” seleciona-se o nome da planilha na qual desejamos escrever os dados (temos duas planilhas criadas: “planilha-mtcars” e “planilha-iris”); no argumento “x” selecionamos o objeto que contém os dados que queremos escrever. Como queremos escrever o objeto “df1” na “planilha-mtcars” e o objeto “df2” na “planilha-iris”, fazemos o seguinte:


writeData(wb, sheet = "planilha-mtcars", x = df1)
writeData(wb, sheet =  "planilha-iris", x = df2)

Com isso já temos duas planilhas com dados. De forma opcional, podemos editar características das planilhas. Por exemplo, alteremos a largura das colunas 1 e 2 da planilha com nome “planilha-mtcars” para o tamanho 16:


setColWidths(wb, sheet = "planilha-mtcars", cols = 1:2, widths = 16)

Também é possível criar um estilo específico e aplicá-lo a células determinadas. Abaixo criamos dois estilos. O primeiro estilo modifica o tamanho da fonte para 16, destaca o texto em negrito e alinha o texto na vertical e na horizontal. Por sua vez, o segundo estilo modifica o tamanho da fonte para 10, torna a cor do texto vermelha e alinha o texto na vertical e na horizontal.


estilo1 <- createStyle(fontSize = 16,
                       textDecoration = "bold",
                       halign = 'center',
                       valign = 'center')

estilo2 <- createStyle(fontSize = 10,
                       fontColour = "red",
                       halign = 'center',
                       valign = 'center')

Os estilos estão criados, mas ainda não selecionamos as células que adotarão os estilos criados. Para aplicar os estilos usamos a função addStyle. O primeiro estilo é aplicado em “planilha-mtcars” para a primeira linha e para as colunas de 1 a 11, isto é, o cabeçalho da tabela. O segundo estilo também é aplicado em “planilha-mtcars”, mas dessa vez somente ao corpo da tabela. É importante notar que quando estamos combinando várias linhas e colunas devemos usar o argumento gridExpand = TRUE. Caso contrário, o R acusará que houve erro. Lembre-se que este passo de configuração de estilos é opcional.


addStyle(wb,
         sheet = "planilha-mtcars",
         style = estilo1,
         rows = 1,
         cols = 1:11)

addStyle(wb, 
         sheet = "planilha-mtcars",
         style = estilo2, 
         rows = 2:33,
         cols = 1:11,
         gridExpand = TRUE)

Agora o que falta é salvar nosso objeto “wb” e escolher um nome para nosso arquivo. Isso é feito por meio da função saveWorkbook. Ao nomear o arquivo, devemos nos lembrar de colocar a extensão “.xlxs” depois do nome do arquivo, caso contrário o arquivo será ilegível no Excel. Assim, fazemos o seguinte para salvar nosso arquivo:


saveWorkbook(wb, file = "exemplo.xlsx")

Depois de salvar nossa arquivo Excel, podemos ver como ficou cada uma das planilhas.

Como podemos perceber a planilha “mtcars” possui as duas primeiras colunas mais largas do que as demais colunas, conforme definido no código R anteriormente. Também notamos que ambos os estilos que criamos foram aplicados as células correspondentes.

Já a planilha “iris” aparece sem formatação específica, uma vez que não aplicamos nenhum estilo a esta planilha.

Exemplo mais direto

Como mencionado no início do post, existe um jeito mais fácil de escrever um arquivo Excel a partir do R. Basta utilizar a função write.xlsx. No primeiro argumento da função devemos especificar o objeto que contém os dados que desejamos escrever. No segundo argumento devemos escolher um nome para o nosso arquivo Excel acrescido da extensão “.xlsx”. Por exemplo, podemos fazer o seguinte para salvar o objeto df1:


write.xlsx(df1, file = "mtcars.xlsx")

Da forma como foi salva, a planilha não apresentará nenhum tipo de formatação específica e salvará uma planilha parecida com a planilha “iris”, mas com os dados de “mtcars”.

Considerações Finais

Escrever arquivos Excel por meio do R pode aumentar nossa produtividade do dia a dia. Outras interações entre R e Excel também são possíveis. Em posts futuros escreveremos mais sobre o assunto.

Citation

For attribution, please cite this work as

Cleaver (2019, Sept. 16). Fulljoin: R com Excel. Retrieved from https://www.fulljoin.com.br/posts/2019-09-04-integrando-o-r-com-excel/

BibTeX citation

@misc{cleaver2019r,
  author = {Cleaver, Miguel},
  title = {Fulljoin: R com Excel},
  url = {https://www.fulljoin.com.br/posts/2019-09-04-integrando-o-r-com-excel/},
  year = {2019}
}