axlsx (gem) 㧠xlsx ãã¡ã¤ã«ããã¦ã³ãã¼ã
axlsx v1.3.4
ããå æ¸ãããã Excel2003 å½¢å¼ (.xls) ã§åºåãç¶ããçç±ããªããªã£ã¦ãã¦ãã¾ã£ãã®ã§(^_^;ãããããéãè °ããã㦠Excel2007 å½¢å¼ (.xlsx) ã§åºåã«ç§»è¡ãããã¨ã«ãã¾ããã使ããããªã©ã¤ãã©ãªã¯ãªãã㨠gem ãæ¢ãã¦ã¿ã¾ãããã¨ããããç®ã«ã¤ãã以ä¸ã®3ã¤ãããã£ã¦ã¿ã¾ããã
3ã¤ã試ãã¦ã¿ãå°è±¡
roo 㯠xls 㨠xlsx ã®ä¸¡å¯¾å¿ã¨ãã触ãè¾¼ã¿ã§ãNo.1åè£ãï¼ï¼ã¨æã£ããã§ãããxlsé¨ã¯ spreadsheet ã«ä¸¸æãã®ããã§ãxlsé¨ã¨xlsxé¨ã¨ã§æ¸ãæ¹ã®ä½æ³ãã¾ãã§éã£ã¦ãå¥ã ã®ãã®ã使ã£ã¦ã大ãã¦å¤ãããªã⦠ããã«ç¬èªã«ä½æãããxlsxé¨ã¯ãcell, row, column ã¨ãã£ãã¯ã©ã¹ããªã常ã«çªå°ï¼è¡çªå·ã»åçªå·ï¼ã§ã¢ã¯ã»ã¹ããã¨ããå ·åã§ããªãããã£ã¡ãæªãæãããã¾ãããï¼ä½¿ç¨è ã®ææ³ã§ãï¼
ä»ã®2ã¤ãacts_as_xlsx 㨠axlsx ã¯åãä½è ã«ããã©ã¤ãã©ãªã®ãã㧠rails ã§ä½¿ããªã acts_to_xlsx ãããããã¨æ¸ãã¦ããã¾ããããã¨ãã°
Posts.where(created_at > Time.now-30.days).to_xlsx
ã¿ããã«ãã¢ãã«ããfindããçµæããã®ã¾ã¾ xlsx åããå ´åã«ã¯ä¾¿å©ãªããã§ãã
ãã ä»åã®èªåã®ç¨éã¨ãã¦ã¯ã表ã®ãããã¼ï¼è¡¨é ã»è¡¨å´ï¼ã«è²ãã¤ãããè¤æ°ã®ã»ã«ã®çµå (merge) ãããããããã£ãã®ã§ axlsx ã§ãããã¨ã«ãã¾ããã
â» ã°ã©ããæ¸ããããããããã¼ãã«ãä½ã£ããã¨ãã£ããã¨ãã§ããã¿ããã§ãã
axlsx 㧠xlsx ãã¡ã¤ã«ãæ¸ãåºã
åºæ¬çãªä½¿ãæ¹ã¯ã
- æ°ããpackageãä½ã
- packageã®ä¸ã®workbookã«æ°ããworksheetã追å
- worksheetã«ï¼è¡ãã¤è¿½å
- package.to_stream.readã§å¾ããããã¼ã¿ãsend_dataã§æ¸ãåºã
ã¨ãã£ãæãã§ãã
pkg = Axlsx::Package.new pkg.workbook do |wb| wb.add_worksheet(:name => 'ã·ã¼ãå') do |ws| # ã·ã¼ãåã®æå®ã¯çç¥å¯ ws.add_row ['a', 1] ws.add_row ['b', 2] end end send_data(pkg.to_stream.read, :type => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", :filename => "test.xlsx")
å®éã«ãã¦ã³ãã¼ããããéã«ã¯MIMEã¿ã¤ãã®è¨å®ï¼config/initializers/mime_types.rbï¼ãå¿
è¦ã§ãã®ã§å¿ããã«ã
Mime::Type.register 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', :xlsx
ããã¡ãã£ã¨ç´°ããåºåãã¼ã¿ã調æ´ãã
æ¸å¼ãæå®ãã
æ¸å¼ã®æå®ã¯ãã·ã¼ãæ¯ã« add_style ã§ã¹ã¿ã¤ã«ãç»é²ãã¦ãadd_row ããéã«ç»é²ããã¹ã¿ã¤ã«ãä¸ç·ã«æå®ãã¾ãã追å ããè¡ã¾ã¨ãã¦1ã¤ã®æ¸å¼ãæå®ãããã¨ãã§ãã¾ãããé åã§1ã»ã«ãã¤æå®ãã¦ã»ã«æ¯ã«æ¸å¼ãå¤ãããã¨ãå¯è½ã§ããæ¸å¼ãæå®ããªãã nil ãæå®ããã¨ããã©ã«ãã®æ¸å¼ã«ãªãã¾ãã
my_style = ws.styles.add_style :fg_color=> "FF00000", :bg_color => "FFF0E6BE", :b => true, :sz => 14, :border => {:style => :thin, :color => "FF333333"}, :alignment => {:horizontal => :center, :vertical => :center} # ï¼è¡ã¾ã¨ãã¦æ¸å¼è¨å® ws.add_row ['a', 'b', 'c'], :style => my_style # ã»ã«ãã¨ã«æ¸å¼è¨å® ws.add_row ['d', 'e', 'f'], :style => [my_style, nil, nil]
è²ã®æå®ã«ã¤ãã¦
è²ã¯16é²æ°ã§ã®RGB表示ã®é ã« "FF" ãã¤ãã¦æå®ããã赤(#FF0000) â "FFFF0000"ãé»: #000000 â "FF000000" ã¨ãã£ãå ·åãã¡ãªã¿ã«RGBã®åå¤ãåãå ´åã¯2æ¡ã®æ°åã§çç¥ã§ããã
my_style = ws.styles.add_style :fg_color=> "FF000000", :border => {:style => :thin, :color => "33"} # "FF333333"ã¨åã
0ããã£ã³ã°ãç¶æããï¼ã»ã«ã®åãè¨å®ããï¼
ã»ã«ã®åã¯ä½ãæå®ããªãã¨ããã©ã«ã㧠Excel ã®ãæ¨æºãåã«ãªãã¾ããåºæ¬çã«ã¯ãã¼ã¿ã®å¤ã«ãããã¦èªåçã«åãå¤å¥ãã¦ããã¾ãã
date_format = ws.styles.add_style :format_code => 'YYYY-MM-DD' time_format = ws.styles.add_style :format_code => 'hh:mm:ss' ws.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"] ws.add_row [Date.today, Time.now, "value", true, 0.1, 1], :style => [date_format, time_format]
ãã ãã"0016" ãªã©0ã§ããã£ã³ã°ãããæ°ååã¯æ°åã¨ãã¦è§£éããã¦ãã¾ãããã®ã¾ã¾ add_row ãã㨠16 ã¨ãªã£ã¦ãã¾ãã¾ãããããªã¨ã㯠add_row ãããã¨ãã« types ãä¸ç·ã«è¨å®ããã°OKã§ãã
ws.add_row ['0016'] # ws.rows.last.cells[0].value = 16 ws.add_row ['0016'], types => [:string] # ws.rows.last.cells[0].value = "0016"
types 㯠styles ã¨ã¯å¥ã«æå®ãã¾ãã
date_format = ws.styles.add_style :format_code => 'YYYY-MM-DD' ws.add_row ['2013/03/20'], styles => date_format, types => :date
åã¨ãã¦ä½¿ç¨ã§ããå¤ã¯ :dateã:timeã:floatã:integerã:stringã:boolean ã®6ã¤ã§ãã