在openxlsx包R中使用mergeCells()在输出中产生错误

时间:2019-01-04 17:00:38

标签: r dataframe openxlsx

我正在尝试将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)

OR

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能够通过删除或修复不可读的内容来打开文件。”

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,则希望合并第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