【问题标题】:Define Excel's column width with R用 R 定义 Excel 的列宽
【发布时间】:2014-12-05 18:09:45
【问题描述】:

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

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

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

如果可能的话,我正在寻找一种技巧来一次改变所有这些或只改变特定的。 running VBA from R 是我唯一的选择吗?

感谢您的帮助!

【问题讨论】:

  • 我很确定,至少有一个 R-to-Excel 软件包可以让您构建具有列级格式选项的 xlsx 电子表格。
  • 您的问题存在概念问题。根据定义将文件保存为*.csv 会丢弃所有格式信息。因此,当您在 Excel 中打开此类文件时,您将获得 Excel 的默认列宽。如果要格式化,必须另存为*.xls*.xlsx
  • 除了接受的答案中提到的包xlsx,您可以使用openxlsx 包。我更喜欢这个,因为它不依赖于rJava

标签: r excel csv formatting


【解决方案1】:

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


这是一个使用包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")

【讨论】:

  • 以上代码根据我们刚刚添加到该工作表中的数据框自动调整单个工作表,但是我们如何使用上述功能从导入的 excel 中自动调整所有工作表?
【解决方案2】:

对已接受答案的小改进:编写文件只是为了再次读取和修改它不是很优雅。此外,我有过使用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")

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2020-12-29
      • 1970-01-01
      相关资源
      最近更新 更多