Rails アプリから Excel にデータをエクスポートするために Ruby Spreadsheet gem を使用している場合、コンテンツのサイズに合わせてセルのサイズ (幅と高さ) を自動的に調整する方法はありますか?
質問する
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 に答える