Module: FastExcel
- Defined in:
- lib/fast_excel.rb
Defined Under Namespace
Modules: AttributeHelper, FormatExt, WorkbookExt, WorksheetExt
Constant Summary collapse
- DEF_COL_WIDTH =
8.43- XLSX_DATE_DAY =
seconds in 1 day
86400.0- XLSX_DATE_EPOCH_DIFF =
days between 1970-jan-01 and 1900-jan-01
25569
Class Method Summary collapse
-
.date_num(time, offset = nil) ⇒ Object
Convert time to number of days, and change beginning point from 1st jan 1970 to 1st jan 1900 Offset argument should be number of seconds, if not specified then it will use Time.zone.utc_offset || 0.
-
.lxw_datetime(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Datetime object.
-
.lxw_time(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Time object.
- .open(filename = nil, constant_memory: false, default_format: nil) ⇒ Object
- .print_ffi_obj(value) ⇒ Object
Class Method Details
.date_num(time, offset = nil) ⇒ Object
Convert time to number of days, and change beginning point from 1st jan 1970 to 1st jan 1900 Offset argument should be number of seconds, if not specified then it will use Time.zone.utc_offset || 0
73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/fast_excel.rb', line 73 def self.date_num(time, offset = nil) unless offset # Try use Rails' app timezone if Time.respond_to?(:zone) offset = Time.zone.utc_offset else offset = 0 # rollback to UTC end end time.to_f / XLSX_DATE_DAY + XLSX_DATE_EPOCH_DIFF + offset / XLSX_DATE_DAY end |
.lxw_datetime(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Datetime object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/fast_excel.rb', line 40 def self.lxw_datetime(time) date = Libxlsxwriter::Datetime.new date[:year] = time.year date[:month] = time.month date[:day] = time.day date[:hour] = time.hour date[:min] = time.minute date[:sec] = time.second date end |
.lxw_time(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Time object
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/fast_excel.rb', line 52 def self.lxw_time(time) date = Libxlsxwriter::Datetime.new date[:year] = time.year date[:month] = time.month date[:day] = time.day date[:hour] = time.hour date[:min] = time.min date[:sec] = time.sec date end |
.open(filename = nil, constant_memory: false, default_format: nil) ⇒ Object
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 35 36 37 |
# File 'lib/fast_excel.rb', line 6 def self.open(filename = nil, constant_memory: false, default_format: nil) tmp_file = false unless filename require 'tmpdir' filename = "#{Dir.mktmpdir}/fast_excel.xslx" tmp_file = true end unless filename raise ArgumentError, "filename is required" end filename = filename.to_s if defined?(Pathname) && filename.is_a?(Pathname) workbook = if constant_memory opt = Libxlsxwriter::WorkbookOptions.new opt[:constant_memory] = 1 Libxlsxwriter.workbook_new_opt(filename, opt) else Libxlsxwriter.workbook_new(filename) end result = Libxlsxwriter::Workbook.new(workbook) if default_format raise "default_format argument must be a hash" unless default_format.is_a?(Hash) result.default_format.set(default_format) end result.tmp_file = tmp_file result.filename = filename result end |
.print_ffi_obj(value) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/fast_excel.rb', line 86 def self.print_ffi_obj(value) puts "#{value.class}" value.members.each do |key| field_val = if value[key].is_a?(FFI::Pointer) && value[key].null? "nil" elsif value[key].is_a?(FFI::StructLayout::CharArray) value[key].to_str.inspect elsif value[key].is_a?(String) value[key].inspect else value[key] end puts "* #{key}: #{field_val}" end end |