如果我使用 Ruby Spreadsheet gem 将数据从 rails 应用程序导出到 excel,有没有办法让单元格的大小(宽度和高度)自动调整到内容的大小?
问问题
3813 次
2 回答
9
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_s.strip.split('').count+3
于 2013-02-28T23:02:42.427 回答
5
对于未来的读者,这里是上面 CCinkosky 代码的稍微“红宝石风格”的版本。(注意:我没有费心调整列高的大小,但这可以很容易地添加。)
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
于 2015-12-17T17:37:56.853 回答