R - 自动调整Excel列宽

Ara*_*ani 7 excel r copy-paste openxlsx

如何使用自动调整列宽openxlsx

我的一个列有一个日期变量(例如21-08-2017),如果使用ctrl+cExcel 复制,并且通常粘贴在其他位置,则显示为#######(如果增加列宽以在Excel中显示内容,则它会正常粘贴).我想将重复性任务集成到我的代码中.这是我现在正在使用的:

WB <- loadWorkbook(File)
addWorksheet(WB, Sheet)
writeDataTable(WB, Sheet, DF, withFilter=F, bandedRows=F, firstColumn=T)
saveWorkbook(WB, File,  overwrite =TRUE)
Run Code Online (Sandbox Code Playgroud)

我在这里附上了相关的全部代码,我也在根据表值进行条件格式化.请建议一种在此处集成自动调整列宽的方法.

编辑:默认情况下,R的XLSX输出具有默认的8.43列宽,我想根据单元格内容将其设置为自动调整,或者为每列手动设置它.

To Mod:这是我试图在R中使用openxlsx解决的问题.无论如何,感谢关注.

Ara*_*ani 12

好的,我在文档中进行了另一次广泛搜索后得到了它.从在线解决方案的缺乏看来,很少有人真正使用这个...

setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = "auto")
Run Code Online (Sandbox Code Playgroud)

但是,这仍然没有给出预期的结果,日期列仍然有点短并显示########; 而列标题也不合适(因为它们格式为粗体).

编辑:

最后,选择添加c(7.5, 10, "auto", ...)替换只是"auto",它不是完全动态,但现在解决了问题.希望能看到更好的答案.

  • “编辑”下的想法是个好主意。它考虑到单元格内容可以有不同的字体大小,但使用 &lt;code&gt;widths = c("auto", "auto", "auto",...)&lt;/code&gt; 它会自动将单元格宽度调整为字符串大小和长度。好工作! (2认同)

Ric*_*ack 5

鉴于此方法widths = "auto"没有按您希望的那样工作,请根据最最长的值+ 2(处理粗化)分配宽度的更通用的答案:

width_vec <- apply(DF, 2, function(x) max(nchar(as.character(x)) + 2, na.rm = TRUE)) setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = width_vec)

并根据列标题分配宽度:

width_vec_header <- nchar(colnames(DF)) + 2
setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = width_vec_header)

并根据每列最长的字符串(不管是标题还是主体中的单元格)分配宽度,请使用“平行”最大函数(如矢量化最大函数):
width_vec <- apply(DF, 2, function(x) max(nchar(as.character(x)) + 2, na.rm = TRUE))
width_vec_header <- nchar(colnames(DF)) + 2
max_vec_header <- pmax(width_vec, width_vec_header)
setColWidths(WB, Sheet, cols = 1:ncol(DF), widths = max_vec_header )