使用 xlsx 包 saveWorkbook() 函数保存后,Excel 中的数字格式错误

问题描述 投票:0回答:1

我有很长的代码,它需要带有几张工作表、已经应用的样式、格式和宏的 excel 工作簿。在我的代码中,我将数据添加到特定单元格(以矩阵的形式),主要是数字,但也有一些文本,然后保存在新的 Excel 文件中。我面临的问题是,在保存的工作簿中,数字不会保存为数字 - 例如 15 或 0 不会被视为数字 - 仅当我在 Excel 单元格中按 Enter 键后,它们才会转换为数字。此外,更大的问题是,由于某种原因,小数是用点而不是逗号保存的,例如,R 中的 1.5151,而不是 1,5151 - 即使在 R 代码中数据类型确实是数字。如果仅将随机数据帧保存到单独的 Excel 中,则数字应为应有的样子。简短的演示代码示例:

    ### read empty template
    fn <- "input.dir/Reporting_template_EMPTY.xlsx"
    wb <- loadWorkbook(fn)
    sheets <- getSheets(wb)
    
    #custom function to write in excel 
    DataToTemplate <- function(sheet.nm, start.row, start.col, m.out, sheets){
    # get cell block from template
    sheet <- sheets[[which(names(sheets) == sheet.nm)]]
    cb <- CellBlock(sheet, startRow=start.row, startColumn=start.col, noRows=nrow(m.out), 
    noColumns=ncol(m.out), create=FALSE)
    # set needed data into excel
    CB.setMatrixData(cellBlock = cb, x = m.out, startRow = 1, startColumn = 1, showNA = FALSE, 
    cellStyle = NULL)
    }

    sheet.nm <- "1.0"
    out <- as.matrix(dd[which(dd[, "field_nm"] == "a1_0"), "value"])
    DataToTemplate(sheet.nm, 5, 3, out, sheets)

    fn <- "out.dir/Report2022.xlsx"
    saveWorkbook(wb, fn)

最初我使用的是 R 中的“xlsx”库。此外,尝试用“openxlsx”重写代码并使用 data.frame 而不是矩阵 - 同样的问题。 Excel 2016版本在保存文件的服务器上。

r excel macros xlsx openxlsx
1个回答
0
投票

我认为问题如下。当您将数据转换为矩阵时,所有数据类型都会更改为

character
,因为
matrix
可以保存单一类型的值。原因是正如您提到的那样,并非所有数据都是数字。所以
character
是唯一能够同时表示数字和字符的类型。

可能的出路是阻止这种类型转换。您可以尝试用数字和字符分隔填充单元格。

© www.soinside.com 2019 - 2024. All rights reserved.