Ruby on rails 使用Ruby电子表格gem,有没有办法让单元格调整到内容的大小
如果我使用Ruby电子表格gem将数据从rails应用程序导出到excel,有没有办法获得单元格的大小(宽度和高度)来自动调整内容的大小Ruby on rails 使用Ruby电子表格gem,有没有办法让单元格调整到内容的大小,ruby-on-rails,excel,spreadsheet,Ruby On Rails,Excel,Spreadsheet,如果我使用Ruby电子表格gem将数据从rails应用程序导出到excel,有没有办法获得单元格的大小(宽度和高度)来自动调整内容的大小 def autofit(worksheet) (0...worksheet.column_count).each do |col| @high = 1 row = 0 worksheet.column(col).each do |cell| w = cell==nil || cel
def autofit(worksheet)
(0...worksheet.column_count).each do |col|
@high = 1
row = 0
worksheet.column(col).each do |cell|
w = cell==nil || cell=='' ? 1 : cell.to_s.strip.split('').count+3
ratio = worksheet.row(row).format(col).font.size/10
w = (w*ratio).round
if w > @high
@high = w
end
row=row+1
end
worksheet.column(col).width = @high
end
(0...worksheet.row_count).each do |row|
@high = 1
col = 0
worksheet.row(row).each do |cell|
w = worksheet.row(row).format(col).font.size+4
if w > @high
@high = w
end
col=col+1
end
worksheet.row(row).height = @high
end
end
此方法将遍历工作表中的每一列,然后遍历该列中的每一个单元格,找到字符最多的单元格(+3表示一点额外空间),并根据该单元格进行调整。然后对行执行相同的操作。此值对于字体大小10非常有效,但为了确保对于较大字体它会变大一点,它会使用以下代码调整字体大小:
ratio = worksheet.row(row).format(col).font.size/10
w = (w*ratio).round
…虽然不完美,但能完成任务
更新了以包括KevinM的方法。两个都适合我,但凯文的看起来也更好。原来的第6行是:
单元格==零| |单元格=''?w=1:w==cell.to_.strip.split(“”).count+3对于未来的读者,这里是一个稍微“ruby-esque”版本的CCinkosky代码。(注意:我没有费心调整柱高度的大小,但这可以很容易地添加。)
如果您使用的是更宽的字体,如Arial Black或其他字体,您可能还需要将此
ratio=worksheet.row(@c).format(col).font.size/10
更改为ratio=worksheet.row(@c).format(col).font.size/13
或类似的字体,非常好。我不得不把第6行改为w=cell==nil | | cell==''?1:cell.to_.strip.split(“”)。计数+3使其工作,但除此之外,它是完美的。
def autofit(worksheet)
(0...worksheet.column_count).each do |col_idx|
column = worksheet.column(col_idx)
column.width = column.each_with_index.map do |cell, row|
chars = cell.present? ? cell.to_s.strip.split('').count + 3 : 1
ratio = worksheet.row(row).format(col_idx).font.size / 10
(chars * ratio).round
end.max
end
end