使用Axlsx,我的一些单元格被设置为包装文本,效果很好。我遇到的问题是如何计算单元格的自动宽度。看起来最初发生的事情是这样的数据:
cell line1 cell line2 cell line3 cell line4 cell line5
使用哪个Axlsx来设置宽度。但随后包装文本进入并正确设置单元格:
cell line1
cell line2
cell line3
cell line4
cell line5
然后正确设置它的高度以显示所有五个值,但行宽仍然很大。有没有人知道是否有办法让Axlsx自动调整单元格的大小,就好像你要在Excel中双击单元格使其自动调整宽度一样? Setting Excel column widths correctly when adding to spreadsheet via Axlsx似乎无法实现,但我无法让它产生任何影响 - 不确定:widths
属性是否已存在或有效?
我也一直在玩column_widths,例如sheet.column_widths *30
。有谁知道是否有办法强制所有列与此属性具有相同的宽度?它似乎不接受一个数组 - 只有整数/浮点数/ fixnums用逗号分隔,并且* 30只将第一列设置为30的宽度。我事先并不知道有多少列#&# 39; m将要使用(动态数据),所以我喜欢能够将其设置为仅将所有列自动调整到一定宽度。
答案 0 :(得分:9)
检查colum_widths函数,迭代传递的参数,并将那些(传递的参数数量)列宽度设置为传递值。
所以,如果你想将 X 列数宽度设置为 Y ,那么你应该将[Y]*x
数组作为参数传递给column_widths,然后使用{ {1}}运算符将此数组转换为参数列表。
在您的情况下,列数将变为动态,因此您可以使用spalt(*)
获取工作表中的列数,如果您想将所有列的宽度设置为30,那么您只需要要做的是,在使用后添加数据集宽度后 -
sheet.column_info.count
答案 1 :(得分:1)
这不是真正的解决方案,但是当Axlsx使列太宽时,我使用以下代码设置“换行”的列宽:
sheet.column_widths *(sheet.column_info.map { |info| [info.width, 50].min })