使用R定义Excel的列宽

时间:2014-12-05 18:09:46

标签: r excel csv formatting

最终产品是Excel CSV电子表格,其中包含250多列。 我想知道是否有办法从R中确定Excel中的列宽?

我使用的是write.csv2,它在excel中产生的列宽等于8,43。

  

write.csv2(df,na ="",file =" Final.csv")

如果可能的话,我正在寻找一个可以同时改变所有这些或仅特定改变它们的技巧。 running VBA from R是我唯一的选择吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:19)

请查看包裹xlsx。我用它来生成excel文件,它非常好。有一个方法 setColumnWidth 可以帮助你。有关xlsx包功能的更详细示例,请查看here


所以这是一个使用包xlsx的工作示例。

df <- data.frame(matrix(rnorm(100),nc=10))
library(xlsx)
# must save as an xls or xlsx file...
write.xlsx(df,"Final.xlsx", row.names=FALSE)
# load it back
wb <- loadWorkbook("Final.xlsx")
sheets <- getSheets(wb)
# set widths to 20
setColumnWidth(sheets[[1]], colIndex=1:ncol(df), colWidth=20)
saveWorkbook(wb,"Final.xlsx")
# autosize column widths
autoSizeColumn(sheets[[1]], colIndex=1:ncol(df))
saveWorkbook(wb,"Final.xlsx")

答案 1 :(得分:3)

对已接受答案的一个小改进:编写一个文件只是为了再次阅读和修改它不是很优雅。此外,我有使用saveWorkbook覆盖xls文件可能导致“损坏”文件的经验(即Excel将需要在打开文件时修复该文件)。

为避免这种情况,可以按以下步骤操作:

df <- data.frame(matrix(rnorm(100), nc=10))
library(xlsx)
wb <- createWorkbook(type = "xlsx")
sheet <- createSheet(wb, sheetName = "rnormdata")
addDataFrame(df, sheet, row.names = FALSE)
setColumnWidth(sheet, colIndex = 1:3, colWidth = 20)
autoSizeColumn(sheet, colIndex = 4:ncol(df))
saveWorkbook(wb, "Final.xlsx")

答案 2 :(得分:0)

您可以为数据集的每一列设置特定的宽度:

for(c in 1:ncol(yourData)){
setColumnWidth(sheetIndex,colIndex=c,colWidth=max(nchar(c(names(yourData[c],yourData[,c])))))
}