5

使用 Axlsx 我的一些单元格设置为包裹文本,效果很好。我遇到的问题是如何计算单元格的自动宽度。看起来正在发生的事情是最初的数据是这样进来的:

cell line1 cell line2 cell line3 cell line4 cell line5

使用哪个 Axlsx 将宽度设置为那么大。但随后换行文本进入并将单元格正确设置为:

cell line1
cell line2
cell line3
cell line4
cell line5

然后正确设置它的高度以显示所有五个值,但行宽仍然很大。有谁知道是否有办法让 Axlsx 自动调整单元格的大小,就好像您要在 Excel 中双击单元格以使其自动调整宽度一样?通过 Axlsx 添加到电子表格时正确设置 Excel 列宽似乎无法解决,但我无法让它产生任何效果 - 不确定该:widths属性是否存在或有效?

我也一直在玩column_widths以及例如sheet.column_widths *30。有谁知道是否有办法强制所有列使用此属性具有相同的宽度?它似乎不接受数组 - 只有整数/浮点数/fixnums 用逗号分隔,并且 *30 只会将第一列设置为 30 的宽度。我实际上事先并不知道我将有多少列使用(动态数据),所以我希望能够将其设置为仅将所有列自动调整为特定宽度。

4

2 回答 2

12

检查colum_widths函数,它遍历传递的参数并将许多(传递的参数数量)列宽度设置为传递的值。

因此,如果要将X列宽度设置为Y,则应将[Y]*x数组作为参数传递给 column_widths,并使用spalt(*)运算符将​​此数组转换为参数列表。

在您的情况下,列数将变为动态,因此您可以使用sheet.column_info.count来获取工作表中的列数,如果您想将所有列的宽度设置为 30,那么您需要做的就是在添加数据集之后宽度使用 - sheet.column_widths *([30]*sheet.column_info.count)

于 2014-12-25T10:25:48.677 回答
1

不是一个真正的解决方案,但是当 Axlsx 使它们太宽时,我使用以下代码设置“换行列”的列宽:

sheet.column_widths *(sheet.column_info.map { |info| [info.width, 50].min })
于 2020-06-17T20:54:22.030 回答