lib/fast_excel.rb in fast_excel-0.2.0 vs lib/fast_excel.rb in fast_excel-0.2.1
- old
+ new
@@ -1,15 +1,23 @@
require_relative './fast_excel/binding'
module FastExcel
+
+ class Formula
+ attr_accessor :fml
+ def initialize(fml)
+ @fml = fml
+ end
+ end
+
DEF_COL_WIDTH = 8.43
def self.open(filename = nil, constant_memory: false, default_format: nil)
tmp_file = false
unless filename
require 'tmpdir'
- filename = "#{Dir.mktmpdir}/fast_excel.xslx"
+ filename = "#{Dir.mktmpdir}/fast_excel.xlsx"
tmp_file = true
end
unless filename
raise ArgumentError, "filename is required"
@@ -84,21 +92,24 @@
end
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?
+ field_val = if value[key].is_a?(FFI::Pointer) && value[key].null? || value[key].nil?
"nil"
elsif value[key].is_a?(FFI::StructLayout::CharArray)
value[key].to_str.inspect
elsif value[key].is_a?(String)
value[key].inspect
+ elsif value[key].is_a?(Symbol)
+ value[key].inspect
else
value[key]
end
puts "* #{key}: #{field_val}"
end
+ nil
end
module AttributeHelper
def set(values)
values.each do |key, value|
@@ -108,17 +119,22 @@
self[key] = value
end
end
end
- def pretty_print(pp)
+ def fields_hash
res = {}
members.each do |key|
+ #p [key, self[key]]
res[key] = respond_to?(key) ? send(key) : self[key]
end
- pp res
+ res
end
+
+ def pretty_print(pp)
+ pp fields_hash
+ end
end
module WorkbookExt
include AttributeHelper
attr_accessor :tmp_file, :is_open, :filename
@@ -178,10 +194,12 @@
write_number(row_number, index, value.to_f, format)
elsif defined?(DateTime) && value.is_a?(DateTime)
write_datetime(row_number, index, FastExcel.lxw_datetime(value), format)
elsif value.is_a?(Time)
write_datetime(row_number, index, FastExcel.lxw_time(value), format)
+ elsif value.is_a?(Formula)
+ write_formula(row_number, index, value.fml, format)
else
write_string(row_number, index, value.to_s, format)
end
end
end
@@ -232,10 +250,64 @@
def font_family=(value)
self.font_name = value
end
end
+
+ module RowExt
+ include AttributeHelper
+
+ def inspect
+ attr_str = fields_hash.map do |key, val|
+ "@#{key}=#{val.inspect}"
+ end
+ "<Libxlsxwriter::Row #{attr_str.join(" ")}>"
+ end
+ end
+
+ module CellExt
+ include AttributeHelper
+
+ def value
+ if self[:type] == :number_cell
+ self[:u][:number]
+ elsif self[:type] == :string_cell
+ pointer = self[:u][:string]
+ p pointer
+ pointer.null? ? nil : pointer.to_ptr.read_string
+ else
+ self[:user_data1]
+ end
+ end
+
+ def user_data1
+ value
+ #self[:user_data1] && !self[:user_data1].null? ? self[:user_data1].to_ptr.read_string : nil
+ end
+
+ def user_data2
+ self[:user_data2] #&& !self[:user_data2].null? ? self[:user_data2].to_ptr.read_string : nil
+ end
+
+ def sst_string
+ self[:sst_string] #&& !self[:sst_string].null? ? self[:sst_string].to_ptr.read_string : nil
+ end
+
+ #def inspect
+ # attr_str = fields_hash.map do |key, val|
+ # "@#{key}=#{val.inspect}"
+ # end
+ # "<Libxlsxwriter::Row #{attr_str.join(" ")}>"
+ #end
+
+ def inspect
+ attr_str = fields_hash.map do |key, val|
+ "@#{key}=#{val.inspect}"
+ end
+ "<Libxlsxwriter::Row #{attr_str.join(" ")}>"
+ end
+ end
end
Libxlsxwriter::Workbook.instance_eval do
include FastExcel::WorkbookExt
end
@@ -244,6 +316,14 @@
include FastExcel::FormatExt
end
Libxlsxwriter::Worksheet.instance_eval do
include FastExcel::WorksheetExt
-end
\ No newline at end of file
+end
+
+Libxlsxwriter::Row.instance_eval do
+ include FastExcel::RowExt
+end
+
+Libxlsxwriter::Cell.instance_eval do
+ include FastExcel::CellExt
+end