-
Notifications
You must be signed in to change notification settings - Fork 79
/
xls.rb
34 lines (27 loc) · 1.04 KB
/
xls.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module Dossier
class Xls
HEADER = %Q{<?xml version="1.0" encoding="UTF-8"?>\n<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">\n<Worksheet ss:Name="Sheet1">\n<Table>\n}
FOOTER = %Q{</Table>\n</Worksheet>\n</Workbook>\n}
def initialize(collection, headers = nil)
@headers = headers || collection.shift
@collection = collection
end
def each
yield HEADER
yield headers_as_row
@collection.each { |record| yield as_row(record) }
yield FOOTER
end
private
def as_cel(el)
%{<Cell><Data ss:Type="String">#{el}</Data></Cell>}
end
def as_row(array)
my_array = array.map{|a| as_cel(a)}.join("\n")
"<Row>\n" + my_array + "\n</Row>\n"
end
def headers_as_row
as_row(@headers.map { |header| Dossier::Formatter.titleize(header) })
end
end
end