3

我正在尝试将 R 中的数据框输出到 excel 中,但是在尝试打开生成的 xlsx 文件时使用 mergeCells() 时不断出现错误。当单元格合并时,我的数据“丢失了”。我可以取消合并单元格并且数据在那里,但我想对其进行格式化,以便输出(例如我的 df 的第 1 列)跨越多个列。

我尝试在将数据写入工作表之前和之后合并单元格。我也尝试过使用 writeDataTable() 和 writeData(),两者都不起作用。我尝试在不同的列上启动 df(如下所示)。例如,开始将 df 写入第 2 列,然后按 1:2 合并列。另一个我先合并列 1:2,然后从第 1 列开始写入数据。

df <- data.frame(
Category = c("A", "B", "C"),
Type = c("x", "y", "z"),
Number = c("1", "2", "3"), stringsAsFactors = FALSE)

book <- createWorkbook()
sheet <- "Sheet1"
writeData(book, sheet, df, startCol = 2, startRow = 1, colNames = TRUE)
mergeCells(book, sheet, cols = 1:2, rows = 1)
mergeCells(book, sheet, cols = 1:2, rows = 2)
mergeCells(book, sheet, cols = 1:2, rows = 3)
saveWorkbook(book)

或者

mergeCells(book, sheet, cols = 1:2, rows = 1)
mergeCells(book, sheet, cols = 1:2, rows = 2)
mergeCells(book, sheet, cols = 1:2, rows = 3)    
writeDataTable(book, sheet, df, startCol = 1, startRow = 1, colNames = TRUE)
saveWorkbook(book)

保存后打开文件时,错误为“我们发现某些内容等存在问题。Excel 能够通过删除或修复不可读的内容来打开文件”。

任何帮助表示赞赏!

4

1 回答 1

5

如果我正确理解了您的问题,您希望将第 1 列和第 2 列合并以生成与第一列的合并列df。如果这是正确的,那么您的问题是您要合并的最左边的列(第 1 列)是空白的。openxlsx::mergeCells()然后将保持最左侧列的内容合并。要合并第 1 列和第 2 列并在其中包含 的内容df[1],您需要df[1]在最左侧的列中编写 的内容,如下所示:

library(openxlsx)

df <- data.frame(
  Category = c("A", "B", "C"),
  Type = c("x", "y", "z"),
  Number = c("1", "2", "3"), stringsAsFactors = FALSE)

wb <- createWorkbook() # creates workbook
addWorksheet(wb, "Sheet1") # adds sheet
writeData(wb, 1, df[1], startCol = 1, startRow = 1, colNames = TRUE) # writing content on the left-most column to be merged
writeData(wb, 1, df[2:3], startCol = 3, startRow = 1, colNames = TRUE) # write the rest of the content on the columns that wont be merged
for(i in seq_len(nrow(df) + 1)){ # loop over rows for merging
  mergeCells(wb, 1, cols = 1:2, rows = i)
}
rm(i)
saveWorkbook(wb, "test.xlsx", overwrite = T) # save workbook
于 2019-01-04T17:54:45.700 回答