2016-10-27 3 views
2

Я пытаюсь использовать пакет openxlsx (или xlsx или другой пакет) для экспорта фреймов данных в электронные таблицы Excel. Одна из проблем, которые возникают у меня, это то, что я хочу, чтобы определенные столбцы были «текстовыми», а не «общие», потому что Excel имеет тенденцию автоматически форматировать имена генов (например, SEPT16 -> 16-Sep (формат даты)).R: экспортировать данные как «текст» с помощью openxlsx

В документации openxlsx имеется ряд примеров для установки классов столбцов на «валюту», «учет», «гиперссылку», «процент» или «научную», но явно не на «текст». Я попытался установить класс в «текст» или «символ», но столбец Excel Excel по-прежнему «общий». Первоначально правильный текст есть, но если я что-то редактирую в ячейке, Excel автоматически форматирует эти ячейки.

library(openxlsx) 

df <- data.frame(gene = c("SEPT16", "MARCH10", "GATA4"), 
       pvalue = c(0.0123, 0.2315, 0.00001), 
       stringsAsFactors = FALSE) 

class(df$gene) <- "text"   # Doesn't work 
class(df$pvalue) <- "scientific" 

wb <- openxlsx::createWorkbook() 
sheet <- openxlsx::addWorksheet(wb, "test") 
openxlsx::writeDataTable(wb   = wb, 
         sheet  = "test", 
         x   = df) 
openxlsx::saveWorkbook(wb, "example_table.xlsx") 

ответ

1

openxlsx действительно позволяет для форматирования текста, но это требует несколько шагов:

  • создания книги-объекта wb и создать вкладку (листа) для его
  • Создайте ячейка форматирование (cell style) желаете использовать. Для форматирования текста: используйте numFmt = '@'.
  • Присвоить (написать) некоторые данные на лист в вашем рабочей книге-объекте wb
  • Идентифицировать диапазоны ячеек для каждого типа клеток и назначить стиль ячейки к ним

Пример код

# Create workbook & sheet: 
wb <- openxlsx::createWorkbook() 
sheet <- openxlsx::addWorksheet(wb, "test") 

# Create the cell style 
textstyle <- openxlsx::createStyle(fontName = "Arial", fontSize = 7, numFmt = "@") 

# Assign df to workbook 
openxlsx::writeDataTable(wb = wb, sheet = "test", x = df) 

# First identify the range of the 'text cells': 
textcells <- expand.grid(row = c(1,3,5), col = c(1,2,3,4,5)) 

# Then assign 'textstyle' to the 'textcells-range': 
openxlsx::addStyle(wb = wb, sheet = "test", 
        rows = textcells$row, cols = textcells$col, 
        style = textstyle) 

# Save the workbook 
openxlsx::saveWorkbook(wb, "example_table.xlsx") 
Смежные вопросы