Ячейки формата openxlsx как числа с запятой и десятичными знаками

Как можно создать файл Excel, используя openxlsx, где форматирование чисел включает в себя как разделители запятых, так и 2 десятичных знака? Я попробовал код ниже, но не повезло с форматированием.

# Create Customer Dataset
cust <- data.table(Customer = c("Sue", "Ben", "Jason", "Cody"), Sales = 
c(5654.3456, 29384.4, 729, .4093))

# Start Workbook
wb <- createWorkbook()

# Set Sheet Name
sheet = "Customers Report"

# Initiate worksheet within workbook
addWorksheet(wb = wb, sheet = sheet)

# Add Formatting to Spreadsheet
addStyle(wb = wb, sheet = sheet, style = createStyle(numFmt = "NUMBER"), rows = 2:6, cols = 2)
addStyle(wb = wb, sheet = sheet, style = createStyle(numFmt = "COMMA"), rows = 2:6, cols = 2, stack = TRUE)

# Write Customer Dataset to Spreadsheet
writeData(wb = wb, sheet = sheet, x = cust, headerStyle = 
createStyle(textDecoration = "bold"))

# Write Workbook to File
saveWorkbook(wb = wb, file = "~/Desktop/Customer_Report.xlsx", overwrite = TRUE)

2 ответа

Решение

Вы можете установить форматирование по умолчанию для 2 десятичных знаков перед добавлением формата тысяч.

    wb      = createWorkbook()
    options("openxlsx.numFmt" = "0.00") # 2 decimal cases formating
    styleT <- createStyle(numFmt = "#,##0.00") # create thousands format
    addStyle(wb, sheetName, styleT,
             rows = 'yourrows',cols = 'yourcols',
             gridExpand = T, stack = T) # add thousands format to designated cols and rows

Это обеспечит форматирование тысяч для значения, которое уже имеет только 2 десятичных знака.

Я нашел ответ, когда писал этот вопрос, но решил, что пойдет дальше и опубликую его, если у кого-то еще возникнет тот же вопрос в будущем. Я нашел этот ответ через github openxlsx # 75. Пожалуйста, смотрите ниже блок кода:

# Add Formatting to Spreadsheet
addStyle(wb = wb, sheet = sheet, style = createStyle(numFmt = "#,##0.00"), rows = 2:6, cols = 2)

Я обнаружил, что вы используете "0", когда хотите, чтобы там была цифра, независимо от того, является ли она 0, и что вы используете "#" для представления заполнителя для потенциальной цифры. Например, если число равно.4093, как показано выше, то оно будет отформатировано до 0.41, а если число равно 29384.4, как показано выше, то оно будет отформатировано до 29 384,40.

Другие вопросы по тегам